0
여러 줄이 포함 된 문자열에서 토큰으로 데이터를 읽으려고합니다. 는 I 코드를 사용strtok에서 개행 문자를 처리하는 방법은 무엇입니까?
char * pch;
pch = strtok ((char*)MyStr.c_str()," ,|,\n"); int i = 0;
while (pch != NULL && i++ < 10)
{
cerr << i << ':' << pch << ' ';
pch = strtok (NULL, " ,.-");
}
입력이
std::string SP1271 = "1271,1\n"
"0,44248,8,45040,20,1,0,100\n"
"545,590,603,564,566,598,569,585,586,578\n";
하고 출력
1:1271 2:1
0 3:44248 4:8 5:45040 6:20 7:1 8:0 9:100
545 10:590
가 합법적 세퍼레이터로서 '\ n'을 사용하는가요?
왜 컴파일하고 확인? – kabanus
상수'c_str()'반환에'strtok'을 사용하는 것은 좋은 생각이 아닙니다. (강제적 인 non-const cast, 더러운 해킹 !!). _real_ C++에서는 구분자에 따라 텍스트를 분할하는 실제 방법을 살펴보아야합니다. –
네, 구분 기호로'\ n'을 사용하는 것은 합법입니다. 그것은 다른 어떤 캐릭터와도 같습니다. 단, 첫 번째'strtok' 호출에서는'\ n'을 구분 기호로 전달하지만 후속 호출에서는 전달하지 않습니다. 그래서 "1 \ n0"이 하나의 토큰으로 끝나는 이유입니다. 왜냐하면'\ n'은 어떻게 든 특별하기 때문이 아니라 토큰에 대한 구분자로 취급하기 때문에. –