gpt4 book ai didi

C++ std::string::find 总是返回 npos?

转载 作者:行者123 更新时间:2023-11-27 23:26:05 26 4
gpt4 key购买 nike

我正在尝试让这个函数分割一个字符串,然后在不带空格且全部小写的情况下返回它。为此,我试图找到一个 "" 来查看字符串 "The Time Traveler (for so it would be convenient to speak 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++ std::string::find 总是返回 npos?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9423729/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com