2017-12-16 35 views
2

現在、文字列内の単語を検索しようとしています。私はstring::find()を使用しています。しかし、これは文字列中の単語を一度しか見つけません。C++は文字列内の単語を複数回検索します

string a = "Dog"; 
string b = "I have a dog, his name is dog"; 

if (b.find(a) != string::npos) 
{ 
    ... 
} 

単語「犬」が表示される回数を確認するために、文字列bをスキャンする方法はありますか?

+0

もう見つからなくなるまでループを使用してください。 – iBug

+2

[文字列の単語を繰り返す最も洗練された方法]の可能な複製(https://stackoverflow.com/questions/236129/the-most-elegant-way-to-iterate-the-words-of-a-文字列) –

+0

@AustinBrunkhorstいいえ、それは非常に異なっています。私たちはすべての言葉をここでは望んでいません。一つの言葉がどこにあるのか。 – Galik

答えて

2

ループが見つからなくなるまで、ループを使用してください。

std::size_t count = 0, pos = 0; 
while ((pos = b.find(a, pos)) != std::string::npos) { 
    pos += a.size(); // Make sure the current one is skipped 
    count++; 
} 
// Now you have count 
+0

@Galik意味がある。提案ありがとう。 – iBug

+0

pos + = a.size()を設定しても、無限ループが発生します。 whileはpos = 1を見つけたらpos + = a.size()になり、pos = 4に設定されます。 @TysonB。 –

+0

私はあなたがこの点にどのようになったのかは分かりませんが、[CppReference](http://en.cppreference.com/w/cpp/string/basic_string/find)によれば、確実に終了するはずです。 @ TysonB。 – iBug

関連する問題