プロジェクト
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にあります。