2012-03-19 28 views
1

這段代碼的作品,但它有點有限,所以我想刪除的東西,如果它不等於一個字母。我不明白如何做一個remove_if沒有在c + +

我知道我必須使用:: isalpha而不是:: ispunct,但我不明白如何將它刪除,如果它不等於:: isalpha。我掩蓋了這個問題,但沒有得到任何答案,因爲我不明白他們。

textFile[i].erase(remove_if(textFile[i].begin(), textFile[i].end(), ::ispunct), textFile[i].end()); 

任何幫助表示讚賞。

回答

6

我沒有編譯,但是這應該工作:

textFile[i].erase(
    remove_if(textFile[i].begin(), textFile[i].end(), std::not1(std::ptr_fun(::isalpha))), 
    textFile[i].end()); 

這裏的利益鏈接:

如果標準函數子沒還不夠,你也可以實施你自己的:

struct not_a_character : std::unary_function<char, bool> { 
    bool operator()(char c) const { 
     return !isalpha(c); 
    } 
}; 

哪些可以作爲:

textFile[i].erase(
    remove_if(textFile[i].begin(), textFile[i].end(), not_a_character()), 
    textFile[i].end());