计算特定单词在 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++ 文本文件中出现的次数的主要内容,如果未能解决你的问题,请参考以下文章