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

标签 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;
}

输出为: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/

相关文章:

c++ - 计算前缀和

c++ - 如果使用 remove_if 如何删除 vector 的空单元格

c++ - 如何在 main() 完成后调用 C++ 函数

c# - 一组不同的子集

c++ - 您如何使用字符覆盖在 Windows 上进行屏蔽密码输入?

java - 排列操作数和运算符以获得数字

c++ - 从数组中删除所有大于 n 的元素

c++ - 使用 lambda 迭代 std::vector 不想使用 remove_if 删除

非抽象类的 C++ 抽象类分配错误

c++ - 不完整类型的无效使用(链式模板类)