2012-04-27 80 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(...)); 

這很接近但不完全正確。這隻能刪除預留的第一個元素。你想刪除整個範圍:

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

這是它的工作。在9分鐘內,我會綠色箭頭。 – user904963 2012-04-27 21:11:14