Я не понимаю, как сделать remove_if не в C ++ - PullRequest
1 голос
/ 19 марта 2012

Этот код работает, но он немного ограничен, поэтому я хочу удалить что-то, если оно не равно букве.

Я знаю, что должен использовать :: isalpha вместо :: ispunct, но яне понимаю, как заставить его удалить, если он не равен :: isalpha.Я задумала этот вопрос, но нигде не получила ответов, потому что не поняла их.

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

Любая помощь приветствуется.

1 Ответ

6 голосов
/ 19 марта 2012

Я не скомпилировал, но это должно работать:

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());
...