보통 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;
}
'소프트웨어 > C/C++' 카테고리의 다른 글
cpp] thread 만들기 (0) | 2014.05.26 |
---|---|
c] data영역과 text영역 (1) | 2014.04.06 |
c] 문자열에서 char 찾기. strchr (0) | 2014.04.06 |
c/c++] 객체 배열 동적생성시 메모리반환 (0) | 2013.10.11 |
c/c++] Header와 소스코드분리 (0) | 2013.10.04 |
c++] cpp에서 struct를쓰면 default 접근지정자가 public (0) | 2013.10.04 |
c++] 인라인함수 (0) | 2013.10.04 |