したがって、基本的には、文字列を受け入れ、その文字列内の単語をユーザーが置き換えたいものに置き換えるフォーマット関数を作成したいと考えています。最初は、文字列のサイズを変更するとイテレータが無効になる可能性があることに気付くまで、非定義可能イテレータにいくつかの問題がありました。出力が入力と同じになり、例外がスローされなくなりました。何かアドバイス???
string& formatFn(string& s, string& oldWord, string& newWord)
{
string word = "";
for (auto iter1 = s.begin(); iter1 != s.end(); ++iter1)
{
string tmpWord = "";
if (!isblank(*iter1)) // Testing for whitespace
{
tmpWord += *iter1;
if (tmpWord == oldWord)
{
string::iterator beg = iter1 - word.size();
string::iterator end = iter1;
auto sIter = s.erase(beg, end); // Get the position returned by erase
auto i = sIter - s.begin(); // Get an index
s = s.insert(s[i], newWord);
}
}
if (isblank(*iter1))
{
tmpWord.clear();
}
}
return s;
}