這裏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
單參數重載刪除單個字符,而不是範圍重載刪除,那麼,一個範圍。