본문 바로가기

소프트웨어/C/C++

c/c++] CPP에서 strtok사용하기_ string객체를 char*로 변환

보통 c에서 strtok를쓸때는 char*나 char배열을 사용하기때문에 문제없이 strtok가 동작한다.

그러나 cpp의 string header에서 제공하는 string객체는 바로 strtok를 사용할 수 없다.

그래서 string객체를 char*로 변환하는 작업이필요하다.

 

string str("2+3+100+112");
 cout<<str.c_str()<<endl;
 cout<<str.data()<<endl;

 char* temp= new char[str.length()];
 strcpy(temp, str.c_str()); // string.c_str() 은 char*를 return하기때문에 strcpy가 사용 가능

위와같이 string class에서 제공하는 c_str()매서드를 이용하면 string객체의 char*형이 return되서 변형이 가능하다.

그래서 임시 char*에 strcpy로 그 값을 복사해서 사용하였다.

 

그 후 strtok를 사용한 전체소스는 아래와 같다.

 

 

#include <iostream>
#include <string>
#include<cstring>
using namespace std;


int main(){

 string str("2+3+100+112");
 cout<<str.c_str()<<endl;
 cout<<str.data()<<endl;

 char* temp= new char[str.length()];
 strcpy(temp, str.c_str()); // string.c_str() 은 char*를 return하기때문에 strcpy가 사용 가능
 
 int sum=0;
 char* p;
 p= strtok(temp, "+");  
 cout<<p<<endl;
 sum+=stoi(p);
 while(true) {
  p= strtok(NULL, "+"); 
  if(p==NULL) break;
  cout<<p<<endl;
  sum+=stoi(p);
 }
 cout<<"sum == "<<sum<<endl;
  

 return 0;
}