在完整代码
的应用程序中#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确实发生。
我错过了什么?
答案 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;
}