计算特定单词在 C++ 文本文件中出现的次数

Posted

技术标签:

【中文标题】计算特定单词在 C++ 文本文件中出现的次数【英文标题】:Count number of appearances of a specific word in a C++ text file 【发布时间】:2017-02-10 22:43:05 【问题描述】:

我的班级任务是编写一个代码,该代码将计算.txt 文件中特定单词的出现次数不区分大小写

int main()
    char U[50];
    string a;
    int number=0;
    cout<<"name of file"<<endl;
    cin.getline(U,50);
    ifstream text(U,ios_base::binary);
    if(!text)
        cout<<"nonexisting"<<endl;
        return 0;
    
    cin>>a;
    transform(a.begin(), a.end(), a.begin(), ::tolower);
    string word;
    while(text>>word)
        transform(word.begin(), word.end(), word.begin(), ::tolower);
        if(!a.compare(word))number++;       
    
    cout<<number;
    text.close();
    return 0;

问题是程序在一个文件中计算了 32 个字,但其中有 40 个

这是我解决问题的方法

int main()
char U[50];
string a;
int number=0;
cout<<"name of file"<<endl;

cin.getline(U,50);
ifstream text(U);
if(!text)
cout<<"nonexisting"<<endl;
return 0;


cin>>a;

transform(a.begin(), a.end(), a.begin(), ::tolower);
string word;
while(text>>word)
    transform(word.begin(), word.end(), word.begin(), ::tolower);
    if (word.find(a) != string::npos)number++;

   
cout<<number;
text.close();

【问题讨论】:

对于初学者来说,如果你想计算一些东西,你可能应该使用std::count or std::count_if。要继续,我建议将所有单词读入std::vector(可以一次性完成,无需循环)。可能无法解决您的问题,但会使代码更简单。 至于你的问题,你为什么要以二进制模式打开一个文本文件?这可能是一个问题。 C++, count repeated words in the string and display的可能重复 lapsus calami 我之前的作业是二进制的,所以是个错误,不,它不能解决问题,但感谢建设性的批评 显示一个无法正确计数的文件。 【参考方案1】:

我的猜测是未统计的 8 个单词末尾有一个换行符,即它们出现在文件的行尾。你能检查一下是不是这样吗?根据http://www.cplusplus.com/reference/string/string/operator%3E%3E/,>> 运算符使用空格作为分隔符进行解析。

【讨论】:

换行符是一个空白字符。 @n.m.在上面的链接页面中,“注意 istream 提取操作使用空格作为分隔符”。这让我认为在这种情况下只使用文字空格。无论如何,显然这是正确的,因为 OP 在修复后得到了预期的计数。 @GigaRohan 不,“空白”并不意味着“空格字符”。另外,不要链接cplusplus.com,它充满了错误。 en.cppreference.com/w/cpp/string/byte/isspace @n.m 是的,你是对的。我想知道那件事是如何/为什么对 awashima 起作用的 @GigaRohan 它没有计算程序只计算左右有空格的单词,但是如果有逗号或感叹号程序不计算它,我不知道如何解决它跨度>

以上是关于计算特定单词在 C++ 文本文件中出现的次数的主要内容,如果未能解决你的问题,请参考以下文章

C语言 统计文本文件中出现的次数最多和最少的字符串

计算一个单词在文本文件中出现的次数

201671030113 词频统计软件项目报告

在 linux bourne shell 中:如何计算文件中特定单词的出现次数

导入文本查询字母单词个数

C ++计数功能词出现