これに関する制限は、「quqa」をキャッチするとは思わないことです。
if (word1.find('q') != std::string::npos
&& word1.find("qu") == std::string::npos)
cout << word1 << endl;
編集:これは「q」の数を数え、「qu」の数が同じであることを確認します。すべての文字通りの組み合わせを検索するよりもおそらく効率的だと思います。
size_t stringCount(const std::string& referenceString,
const std::string& subString) {
const size_t step = subString.size();
size_t count(0);
size_t pos(0) ;
while( (pos=referenceString.find(subString, pos)) !=std::string::npos) {
pos +=step;
++count ;
}
return count;
}
bool check_qu(const std::string &word1)
{
int num_q = stringCount(word1, "q");
return (num_q > 0) ?
(stringCount(word1, "qu") == num_q) : true;
}