remove_if有问题(几次删除后停止删除)

use*_*963 4 c++ algorithm 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;
}
Run Code Online (Sandbox Code Playgroud)

输出是:abcdefgh.fgh

所以代码工作然后停止工作.到底他妈发生了什么?

Moo*_*uck 11

word.erase(remove_if(...));
Run Code Online (Sandbox Code Playgroud)

这很接近但不太正确.这只会删除留出的第一个元素remove_if.您想要删除整个范围:

word.erase(remove_if(...), word.end());
Run Code Online (Sandbox Code Playgroud)