我如何通过字符串查找单词而不是单词中的每个字符。我在这里有我的代码,它似乎总能找到所有的.obj即使它的o或b或j或“。”我查看了docuementation here,但无法找到答案。这是我的代码:
string &str = *it;
if(it->find(".obj"))
{
cout << "Found .Obj" << endl;
}
我也尝试使用string::compare
,但失败了。
答案 0 :(得分:8)
find
会搜索您作为函数参数传递的全文字符串。你误解的是回报价值; find
不会返回true或false,因为它是否找到了您请求的字符串;它返回找到所请求子字符串的字符串中的索引,如果找不到匹配则返回std::string::npos
。
例如:
std::string a = "foobar.obj";
std::string b = "baz.obj";
std::string c = "qux";
std::string d = ".obj";
a.find(".obj") == 6
b.find(".obj") == 3
c.find(".obj") == std::string::npos // not found
d.find(".obj") == 0
当解释为布尔值时,除0以外的任何整数都被视为“true” - 甚至是“未找到”std :: string :: npos值。我想,这就是你困惑的事情。
那么在你的“if”语句中,而不是:
if (it->find(".obj"))
您想要测试:
if (it->find(".obj") != std::string::npos)