2014-11-06 78 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