我试图让这个函数切出一个字符串,然后返回它而没有空格和所有小写字母。为此,我试图找到一个" "
以查看字符串"The Time Traveller (for so it will be convenient to speak of him)"
是否包含空格。
代码如下,将上面的字符串传递给该函数。它总是返回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);
}
最佳答案
tocut.erase(0)
正在擦除所有tocut
。参数是要删除的第一个字符,默认长度是“ everything”。tocut[0 == 13]
应该应该是tocut[0] == 13
。这些是完全不同的陈述。另外,请与字符值('\t'
)而不是整数进行比较。顺便提一句,这是您的实际问题:tocut[0 == 13]
变为tocut[false]
,即tocut[0]
,即true
。因此,循环将一直运行到tocut
为空为止,这是立即的(因为您在第一遍中就过分地擦除了所有内容)。
上面两个错误的最终结果是,当您到达find
语句时,tocut
是空字符串,其中不包含空格字符。继续...
您可以使用substr
函数而不是循环从tocut
迁移到totoken
。
您的最后一个tocut.erase(start, finish)
行没有任何用处,因为tocut
是传递值,然后您立即返回。
关于c++ - C++ std::string::find总是返回npos吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9423729/