为什么string :: find_first_of()会返回意外结果?

时间:2016-11-21 14:58:38

标签: c++ string c++11

我的代码如下: string s_1 =" ssissippi&#34 ;; string s =" si&#34 ;; size_t pos = s_1.find_first_of(s); while(pos!= string :: npos) {     cout<< pos<< ENDL;     POS ++;     pos = s_1.find_first_of(s,pos); } 我得到了这样的结果: 0,1,2,3,4,5,8。 我无法弄清楚是什么导致了答案。 我真的很感激任何帮助。

2 个答案:

答案 0 :(得分:7)

您似乎是指成员函数find()而不是find_first_of()

例如:

string s_1 = "ssissippi";
string s = "si";
size_t pos = s_1.find(s);
while (pos != string::npos)
{
    cout << pos << endl;
    pos++;
    pos = s_1.find(s, pos);
}

成员函数find_first_of()查找源字符串中的第一个位置,其中存在指定为参数的字符串中的一个字符存在。

答案 1 :(得分:6)

您的find_first_of确实:

  

查找第一个字符,该字符等于str。

中的一个字符

所以它不检查字符串“si”在那里(就像你可能期望的那样),而是“s”或“i”。使用std::string::find()检查整个字符串。