1

このコードは機能しますが、少し制限があるので、文字と等しくない場合は何かを削除したいと思います。

::ispunctの代わりに::isalphaを使用する必要があることは知っていますが、::isalphaと等しくない場合に削除する方法がわかりません。私はこの質問をくすくす笑いましたが、私はそれらを理解していなかったので答えをどこにも得られませんでした。

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

どんな助けでも大歓迎です。

4

1 に答える 1

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());
于 2012-03-19T19:47:40.437 に答える