c++ 在处理词频时,为什么有些单词会打印两次

9vw9lbht  于 2023-03-14  发布在  其他
关注(0)|答案(1)|浏览(87)

我从文件中读取了一些单词并打印了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中。

4c8rllxm

4c8rllxm1#

因为您在编写程序时区分了大小写。
特别地,Thethe被认为彼此不同,因此具有不同的频率,例如,the是2230次,而The是307次。

相关问题