2012-04-27 38 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