这里str
的前去除是string
:C++擦除/的remove_if - 只从字符串
str.erase(std::remove_if(str.begin(), str.end(), &islower));
似乎只从字符串的开头去除小写字符。为什么是这样的,如何让它删除字符串中的所有小写字母?
这里str
的前去除是string
:C++擦除/的remove_if - 只从字符串
str.erase(std::remove_if(str.begin(), str.end(), &islower));
似乎只从字符串的开头去除小写字符。为什么是这样的,如何让它删除字符串中的所有小写字母?
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)
),从作为remove_if
的结果返回到t的结尾的位置他串。这是俗称erase-remove idiom。
你做擦除删除错误:
str.erase(std::remove_if(str.begin(), str.end(), &islower), str.end());
// ^^^^^^^^^^^
你的方式使用的std::string::erase
单参数重载删除单个字符,而不是范围重载删除,那么,一个范围。