String.find在C++中始终返回true

3

我试图让布尔变量 found_word 在找到单词/字符时返回 true,未找到时返回 false,但无论我在文本中写什么,它总是返回 true。循环本身是有效的,已经尝试过了。已包含 IOStream 和 string。

while(timestorun){
    found_word = text.find("khgdawjugfdjhawbdjkhsadgawkdsa");

    if(found_word){
        cout << "FOUND!!!" << endl;
    }
    else if(!found_word){
        cout << "Found problem!!!!!"<< endl;
    }
    timestorun--;
}

有什么建议吗?

你可以使用 else { 代替 else if(!found_word){。这样不会影响代码的工作方式,但会更加简洁。 - Kara
我不能这样做,因为在实际代码中有相当多的if/else。 - AvidScifiReader
2个回答

16

你应该与npos进行比较。 find函数不返回布尔值。

found_word = text.find("khgdawjugfdjhawbdjkhsadgawkdsa") != std::string::npos;

0表示子字符串在索引0处被找到,如果未找到,则返回false

此外,您的第二个条件是多余的——如果found_wordfalse,我可以保证!found_word将是true


+1。特别地,string::npos(size_t)-1,在布尔上下文中为真。 - abarnert

2
应该更像这样:

这应该是更接近实际情况的:

int main ()
{
    int found = text.find("some text");
    if (found != std::string::npos)
    {
        //do stuff if word is there
    }
    else
    {
        //do stuff when word isnt there
    }
}

如果单词不在文本中,text.find应该返回-1,否则它将返回您找到它的字符串位置。


谢谢你修复了那个问题,我太习惯使用 System::String 了(在 Windows 系统的 C++ 版本中,-1 替换了 std::string::npos)。 - Elliot Mendiola

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接