C ++ erase / remove_if - 仅从字符串的前面删除

时间:2014-11-06 10:44:36

标签: c++ stl

此处strstring

str.erase(std::remove_if(str.begin(), str.end(), &islower));

似乎只从字符串前面删除小写字符。为什么这样,如何删除字符串中的所有小写字母?

2 个答案:

答案 0 :(得分:3)

std::basic_string有两个forms of erase个迭代器;第一个用于擦除该位置的单个字符,第二个用于擦除范围内的字符。

  1. iterator erase(iterator position);
  2. iterator erase(iterator first, iterator last);
  3. 尝试两种参数形式:

    str.erase(std::remove_if(str.begin(), str.end(), &islower), str.end());
    

    它会删除firstlast范围内的数据,不包括last(因此[first; last)),作为{{1}的结果返回的位置到字符串的末尾。

    通常称为erase-remove idiom

答案 1 :(得分:2)

你正在擦除错误:

str.erase(std::remove_if(str.begin(), str.end(), &islower), str.end());
//                                                        ^^^^^^^^^^^

你的方法使用std::string::erase的单个参数重载来擦除单个字符,而不是擦除范围重载,以及范围。

Read the documentation <!/ em>的