此处str
是string
:
str.erase(std::remove_if(str.begin(), str.end(), &islower));
似乎只从字符串前面删除小写字符。为什么这样,如何删除字符串中的所有小写字母?
答案 0 :(得分:3)
std::basic_string
有两个forms of erase个迭代器;第一个用于擦除该位置的单个字符,第二个用于擦除范围内的字符。
iterator erase(iterator position);
iterator erase(iterator first, iterator last);
尝试两种参数形式:
str.erase(std::remove_if(str.begin(), str.end(), &islower), str.end());
它会删除first
到last
范围内的数据,不包括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>的