4

以下のコードは、文字列を受け取り、英語のアルファベットから小文字のみを出力したいと考えています。

string simplifyString(string word)
{
    word.erase(remove_if(word.begin(), word.end(), [](char letter){return !isalpha(letter);}));
    transform(word.begin(), word.end(), word.begin(), tolower);
    return word;
}

int main()
{
    string s = "a.b.c.d.e.f.g.h.";
    cout << simplifyString(s) << endl;;
    return 0;
}

出力は次のとおりです。 abcdefgh.fgh

したがって、コードは機能し、その後機能しなくなります。一体何が起こっているのですか?

4

1 に答える 1

11
word.erase(remove_if(...));

それは近いですが、完全には正しくありません。によって確保された最初の要素のみが削除されremove_ifます。範囲全体を削除したい:

word.erase(remove_if(...), word.end());
于 2012-04-27T21:08:47.850 に答える