C ++如何在读取文件时忽略符号?

时间:2016-05-10 08:55:23

标签: c++

这是我目前的读取文件代码:

void Dictionary::processFile() {
    ifstream fin;
    fin.open("article.txt");
    if (fin.fail( )) {
        cout << "Input file opening failed.\n";
        exit(1);
    }

    string word;

    while (!fin.eof()) {
        fin >> word;
        cout << word << endl;
    }
    cout << endl;
    fin.close();
}

如何让我的代码忽略符号(“。';:!等)并且只输出/读取单词?此时它正在阅读文章中的每一个符号。例如”test。“,”他们, “

2 个答案:

答案 0 :(得分:2)

如果您可以使用Boost.Iostrems,您可以为您的流编写自己的InputFilter。请参阅此处的详细信息http://www.boost.org/doc/libs/1_60_0/libs/iostreams/doc/tutorial/writing_filters.html

答案 1 :(得分:2)

像现在一样阅读“单词”,但在打印“单词”之前,请从字符串中过滤掉不需要的字符。

C ++有很多algorithmic functions可以帮助你解决这个问题。出于您的目的,您可以查看例如std::remove_if并执行类似

的操作
static std::string const symbols = "\".';:!";

while (fin >> word)
{
    word.erase(std::remove_if(word.begin(), word.end() [symbols&](char const& ch) {
        return std::any_of(symbols.begin(), symbols.end(), [ch](char const& sym) {
            return ch == sym;
        });
    });

    if (!word.empty())
    {
        // Do something with the "word"
    }
}