0

だから私はこれを持っていて、下の部分をコメントアウトすると、からからint count = 0;return 0;印刷されますが、この場合は何も印刷されません。最初に追加cout << "Test"しても何もしません。ただし、すべて正常にコンパイルされます。

#include <iostream>
#include <string>
#include <cctype>
using namespace std;

int main()
{
    string text = "Smith, where Jones had had \"had had\", had had \"had\". \"Had had\" had had the examiners' approval.";

    string search = "had";

    int length = (int) text.length();

    for(int i = 0; i < length; i++)
    {
        text [i] = tolower(text [i]);
    }

    cout << text;

    int count = 0;
    for (int index = 0; (index = text.find(search)) != string::npos; index += search.length()) {
        count++;
        }

    cout << "There are " << count << " occurences of \"" << search << "\".\n"; 
    return 0;
}
4

2 に答える 2

2

最初のループは問題ありませんが、常にテキストの先頭から検索しているため、2番目のループはインデックス19でスタックします。

于 2013-02-16T05:31:17.633 に答える
2

コンパイルしてからg++ -g a.cppgdb で実行すると、無限ループになっていることがわかります。

ただし、@ xymostech の回答で指摘されていることは正しいです。ただし、ループが終了した場合、コードが終了する前にバッファーがフラッシュされます。

あなたのパターンは常に文字列で見つかるため、text.find(search)決して返されませんstring::npos

于 2013-02-16T05:32:09.057 に答える