str.find()似乎忽略了字符串中的第一个字符

时间:2011-03-24 12:48:42

标签: c++

在完整代码

的应用程序中
#include <iostream>
#include <string>

using namespace std;

int main()
{
    string str = "Insert";
    int kint = 0;

    if (kint == 0 && str.find("Insert"))
    {
        cout << "found" << endl;
    }

return 0;
}

没有cout发生过。如果您搜索“nsert”而不是cout确实发生。

我错过了什么?

4 个答案:

答案 0 :(得分:6)

你错过了这样一个事实:当find没有返回任何内容时,它会返回npos而不是零。返回值为0表示它在索引0处找到它要查找的内容。

if (kint == 0 && str.find("Insert) != string::npos) { ... }

[注意:大约15秒钟,这个答案错误地声称str.find()在失败时返回str.end()。这是垃圾。如果有人读错版本并相信它,我表示歉意。]

答案 1 :(得分:1)

看看find函数返回的内容:

  

返回值第一个的位置   发生在字符串中   搜索内容。如果内容是   没找到,成员价值npos是   返回。

由于您搜索“插入”,它返回0而if失败

答案 2 :(得分:0)

实际上它会返回位置,在你的情况下为0。 0转换为false ... 看here

您需要在if语句中检查str.find("Insert") != std::string::npos

答案 3 :(得分:0)

find()返回找到的char的位置。所以第一个char的位置是0,在布尔值中转换为false。 你应该与npos进行比较

if (kint == 0 && str.find("Insert") != str::npos)
{
    cout << "found" << endl;
}