我从文件中读取了一些单词并打印了30个最常用的单词,但仍打印了一些单词
是输出中的两倍。
#include <iostream>
#include <vector>
#include <map>
#include <iterator>
#include <fstream>
using namespace std;
int main(){
fstream fs, output;
fs.open("/Users/brah79/Downloads/skola/c++/inlämningsuppgifter/labb4/L4_wc/hitchhikersguide.txt");
output.open("/Users/brah79/Downloads/skola/c++/inlämningsuppgifter/labb4/labb4/output.txt");
if(!fs.is_open() || !output.is_open()){
cout << "could not open file" << endl;
}
map <string, int> mp;
string word;
while(fs >> word){
for(int i = 0; i < word.length(); i++){
if(!isalpha(word[i])){
word.erase(i--, 1);
}
}
if(word.empty()){
continue;
}
mp[word]++;
}
vector<pair<int, string>> v;
v.reserve(mp.size());
for (const auto& p : mp){
v.emplace_back(p.second, p.first);
}
sort(v.rbegin(), v.rend());
cout << "Theese are the 30 most frequent words: " << endl;
for(int i = 0; i < 30; i++){
cout << v[i].second << " : " << v[i].first << " times" << endl;
}
output << "Theese are the 30 most frequent words: " << endl;
for(int i = 0; i < 30; i++){
cout << v[i].second << " : " << v[i].first << " times" << endl;
}
return 0;
}
输出:
那个:2230次!!!
次数:1254次
至:1177次
a:1121次
和:1109次
说:680次
它:665次
为:605次
输入:590次
他:546次
即:520倍
您:495次
I:428次
开启:349次
亚瑟:332次
他的:324次
福特:314次
第307次!!!
在:306次
用于:284次
是281次
使用次数:273次
有:252次
他:242次
这个:220次
作为:207次
赞法德:206次
放大倍数:188倍
全部:186次
他:182次
“the”被打印了两次。另外“无法打开文件”甚至被打印在顶部
尽管文件已打开且其内容存储在Map中。
1条答案
按热度按时间4c8rllxm1#
因为您在编写程序时区分了大小写。
特别地,
The
和the
被认为彼此不同,因此具有不同的频率,例如,the
是2230次,而The
是307次。