使用字符串查找单词的正确方法是什么

What is the proper way to use string::find to look for a word?

本文关键字:方法 是什么 单词 字符串 查找      更新时间:2023-10-16

如何在字符串中查找单词,而不是该单词中的每个字符。我在这里有我的代码,它似乎总能找到.obj的所有内容,即使它是o、b、j或"。"我检查了这里的文档,但找不到答案。这是我的代码:

 string &str = *it;
 if(it->find(".obj"))
 {
     cout << "Found .Obj" << endl;
 }

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

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 (it->find(".obj"))

你想测试:

if (it->find(".obj") != std::string::npos)