0

プロジェクト

old_word:new_word構文の変更を簡単にするために、次の構文のファイルを受け取るプログラムを作成することを考えました。他にも計画はありますが、現在、プログラムのコアが機能していません。

問題

私はC++を長い間使用していないので、まだ学習中です。他の人の文字列置換関数を使用していますが、無限ループに陥っています。この関数には、私がよく知らない構文が含まれているため、失敗する理由がわかりません。他のすべての関数は正しく戻ります。

文字列置換機能を以下に示します。

//!Not my work
void replaceAll(std::string& str,  std::string& from,  std::string& to) {
size_t start_pos = 0;
while((start_pos = str.find(from, start_pos)) < std::string::npos) {
    str.replace(start_pos, from.length(), to);
    start_pos += to.length();
}
}

プログラムはこのループで失敗します:

for(int secInd=0; secInd<members; secInd++)
    {
        replaceAll(line[index],toStrings[secInd],fromStrings[secInd]);
    }

line関数から取得したバッファgetlineです。toStringsは言語定義ファイルからロードされ、fromStringsも同様です。

なぜこれが無限ループに陥るのか、そしておそらくそれを修正する方法を教えてもらえますか?完全なソースは、必要に応じてhttp://pastebin.com/zXFFvUSmにあります。

4

1 に答える 1

0

デバッガーで実行します。初心者(または特定の言語の初心者)のプログラマーは、デバッガーの学習と使用がいかに難しいかを過大評価することがよくあります。この問題を解決するのに十分なdbxを学習し、この質問をして回答を待つのにかかる時間でそれを行うことができたはずです。そうです、このような単純なタスクには非常に簡単に使用できます。

于 2012-05-22T22:30:15.237 に答える