c++ - 如何读取特定格式的文本文件c++

标签 c++ stl formatting string-formatting read-write

我正在逐字阅读文件,我想首先通过将所有字符转换为小写来预处理单词并删除标点符号除外的所有非字母字符:连字符 (-) 和撇号 ('),然后相应地显示。我已完成将单词转换为 lowercase 但现在我需要删除除连字符 (-) 和撇号 (') 之外的非字母字符。我不知道该怎么做。有人可以解决这个问题吗?

void WordStats::ReadTxtFile()
{
    std::ifstream ifile(Filename);
    if(!ifile)
    {
        std::cerr << "Error Opening file " << Filename << std::endl;
        exit(1);
    }

    for (std::string word; ifile >> word; )
    {
        transform (word.begin(), word.end(), word.begin(), ::tolower);
        WordMap & Words = (Dictionary.count(word) ? KnownWords : 
        UnknownWords);
        Words[word].push_back(ifile.tellg()); 
    }

    std::cout << KnownWords.size() << " known words read." << std::endl;
    std::cout << UnknownWords.size() << " unknown words read." << std::endl;
}

最佳答案

你可以使用 std::remove_if

word.erase(std::remove_if(word.begin(), word.end(), [](char c)
{
    return (c < 'a' || c > 'z') && c != '\'' && c != '-';
}),  word.end());

关于c++ - 如何读取特定格式的文本文件c++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50244952/

相关文章:

C++ - 在我关闭程序之前 ofstream 不会输出到文件

C++ 随机数猜谜游戏错误

c++ - Boost 库已成为 C++ 标准

c++ - std::string 真的包装了一个 C char 数组吗?

java - 如何打印不带逗号的 Double

c++ - 'fprintf' 颜色格式包装器

c++ - 为什么第一个元素被破坏?

c++ - 我如何确定我是否可以将数组中的某些元素相加为 K?

angularjs - 使用 AngularJS 指令格式化输入字段,同时保持范围变量不变

c++ - C++ 是否有标准方法对两个 std::sets、 vector 等进行三态比较?