2014-11-06 45 views
0

这里str的前去除是stringC++擦除/的remove_if - 只从字符串

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

似乎只从字符串的开头去除小写字符。为什么是这样的,如何让它删除字符串中的所有小写字母?

回答

3

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

  1. iterator erase(iterator position);
  2. iterator erase(iterator first, iterator last);

尝试两个参数形式:

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

它将在范围擦除数据firstlast,不含last(因此[first; last)),从作为remove_if的结果返回到t的结尾的位置他串。这是俗称erase-remove idiom

2

你做擦除删除错误:

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

你的方式使用的std::string::erase单参数重载删除单个字符,而不是范围重载删除,那么,一个范围。

Read the documentation