使用string :: find寻找单词的正确方法是什么?

时间:2012-04-02 11:07:11

标签: c++

我如何通过字符串查找单词而不是单词中的每个字符。我在这里有我的代码,它似乎总能找到所有的.obj即使它的o或b或j或“。”我查看了docuementation here,但无法找到答案。这是我的代码:

 string &str = *it;

 if(it->find(".obj"))
 {
     cout << "Found .Obj" << endl;
 }

我也尝试使用string::compare,但失败了。

1 个答案:

答案 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)