我试图让这个函数切出一个字符串,然后返回它而没有空格和所有小写字母。为此,我试图找到一个" "以查看字符串"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/

10-09 09:52