2012-03-19 2 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()); 

Звенья интерес здесь:

Если стандартные функторы Бесполезный 't достаточно, вы также можете реализовать свои собственные:

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()); 
Смежные вопросы