이 함수는 문자열을 자르고 공백없이 모든 소문자를 반환하려고합니다. 그리고 이렇게하려면 문자열이 "The Time Traveller (for so it will be convenient to speak of him)"
에 공백이 있는지 확인하기 위해 " "
을 찾으려고합니다.C++ std :: string :: find는 항상 npos를 반환합니까?
코드는 다음과 같습니다. 위의 문자열을이 함수에 전달합니다. 항상 string::npos
을 반환합니다. 문제에 대한 어떤 생각?
string chopstring(string tocut){
string totoken = "";
int start = 0;
while(tocut[0] == ' ' || tocut[0] == 10 || tocut[0 == 13]){
tocut.erase(0);
}
int finish = 0;
finish = tocut.find(" ", start);
if (finish == string::npos){
cout << "NPOS!" << endl;
}
for (int i = start; i < finish; i++){
totoken += tocut[i];
}
tocut.erase(start, finish);
return tokenize(totoken);
}
하지만 http://www.cplusplus.com/reference/string/string/erase/ 에 있습니다. iterator erase (iterator position); 반복기 위치에서 참조하는 문자를 지 웁니다. 한 문자 만 영향을받습니다. – samuraiseoul
또한,'tocut [0] == 10 || tocut [0 == 13]'매우 이상하게 보입니다. 대 문자 리터럴을 비교하려면 실제 리터럴 (즉,''\ n' '대신에 10)을 사용하십시오. 훨씬 더 읽기 쉽습니다. 'tocut [0 == 13]'은 아마도 오자 일 것이고'0 == 13'은 항상 거짓이므로 첫 문자의 값을 반환 할 것입니다 (문자열이 비어 있지 않으면 0이 아닌 값이됩니다) . 다시 문자 리터럴을 사용하십시오. (' '\ r'') –
@Samuraisoulification :'int'는'string :: iterator'와 같은 타입이 아닙니다. –