2016-11-21 67 views
1

我的代碼如下:爲什麼string :: find_first_of()返回意外結果?

string s_1 = "ssissippi"; 
string s = "si"; 
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。
我不明白是什麼導致了答案。 我會很感激任何幫助。

+1

你期望什麼結果? –

+2

此外,從[此'std :: string :: find_first_of'參考](http://en.cppreference.com/w/cpp/string/basic_string/find_first_of):「查找第一個字符等於***一***給定字符序列中的字符。「 –

+0

我相信你並不是唯一一個誤讀文檔的人。所以這個問題可能對其他人有用。 –

回答

6

看來你指的成員函數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()發現其中所指定的字符串中的字符的商店之一的源串中的第一位置因爲爭論是存在的。

+0

感謝您的幫助,通過再次閱讀參考資料,我已經知道我在哪裏錯了。 –

6

find_first_of做:

找到的第一個字符等於str中的人物之一。

所以也沒有檢查字符串「SI」在那裏(就像你可能預期的),而是要麼「s」或「I」。使用std::string::find()檢查整個字符串。

+1

非常感謝,我明白了。感謝您的幫助。 –