我試圖讓這個函數切割一個字符串,然後返回它沒有空白和全部小寫。爲了做到這一點,我試圖找到" "
以查看字符串"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/ 它說 迭代器擦除(迭代器位置); 擦除迭代器位置引用的字符。只有一個字符受到影響。 – samuraiseoul 2012-02-24 00:46:35
另外,'tocut [0] == 10 || tocut [0 == 13]'看起來很奇怪。如果你想比較字符文字,使用實際的文字(即10,而不是'\ n''),它更可讀。 'tocut [0 == 13]'大概是一個錯字,並且由於'0 == 13'總是爲false,所以你會返回第一個字符的值(如果字符串不爲空,它將不爲零) 。再次使用字符文字(''\ r'') – 2012-02-24 00:49:27
@Samuraisoulification:'int'與'string :: iterator'不是一樣的類型。 – 2012-02-24 00:50:00