下面的代码想要获取一个字符串并只输出英文字母表中的小写字母。
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。
所以代码工作然后停止工作。这到底是怎么回事?
最佳答案
word.erase(remove_if(...));
这很接近,但不太正确。这只会删除由 remove_if
设置的 first 元素。你想删除整个范围:
word.erase(remove_if(...), word.end());
关于c++ - remove_if 有问题(删除几次后停止删除),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10357836/