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)