2012-04-27 11 views
4

以下のコードは文字列を取り、英語アルファベットの小文字のみを出力します。remove_ifに問題があります(削除しても削除されなくなります)

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.f.g.hです。

コードが機能し、動作を停止します。一体何が起こっているの?

答えて

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

これは近似的ですが、正しくはありません。それはremove_ifによって脇に置かれた最初の要素を削除するだけです。範囲全体を削除するには:

word.erase(remove_if(...), word.end()); 
+0

それが機能しています。 9分後、私はそれを緑色の矢印にします。 – user904963

関連する問題