[C++]查询文本中所有单词出现的频率,并且根据出现次数由多到少依次排列。

编译器
本人所用的编译器为:CodeBlocks
程序说明
该程序统计查找文本中所有单词的出现次数,并且根据出现次数由多到少依次排列。该程序查考了C++ primer中单词查询程序,对单词查询程序加以修改得到的。
 
程序运行结果
对从网上找到的英语六级进行单词统计,统计所有单词的出现频率。结果如下:
 
 
 
 
 
 
 
 
运行结果:[C++]查询文本中所有单词出现的频率,并且根据出现次数由多到少依次排列。
[C++]查询文本中所有单词出现的频率,并且根据出现次数由多到少依次排列。
 
 
源代码
main函数
#include <iostream>
#include<vector>
#include<fstream>
#include<cstdlib>
#include"statistics.h"
ifstream& open_file(ifstream& in, const string& file)
{
    in.close();
    in.clear();
    in.open(file.c_str());
    return in;
}
int main(int argc, char **argv)
{
    ifstream infile("text.txt");
    statistics tq;
    tq.read_file(infile);
    tq.dis();
    return 0;
}

类函数
#ifndef STATISTICS_H
#define STATISTICS_H
#include<iostream>
#include<vector>
#include<map>
#include<iostream>
#include<vector>
#include<fstream>
#include<set>
#include<string>
#include<map>
#include<sstream>

using namespace std;
class statistics
{
    public:
        typedef vector<string>::size_type line_no;
        statistics();
        virtual ~statistics();
        void read_file(ifstream& is){
            store_file(is);
            build_map();
        }
        void store_file(ifstream&);
        void build_map();
        void dis();
   private:
        vector<string> lines_of_text;
        map<string, int> word_map;
        map<string, int> finish;
};

#include "statistics.h"
void statistics::store_file(ifstream& file)
{
    string textline;
    while(getline(file, textline))
        lines_of_text.push_back(textline);
}
void statistics::build_map()
{
    for (statistics::line_no line_num = 0; line_num != lines_of_text.size(); ++line_num){
        istringstream line(lines_of_text[line_num]);
        string word;
        while(line >> word){
            word_map[word] += 1;
        }
    }
}
void statistics::dis()
{
    map<string, int> first_Max;
    map<string, int>::iterator Max;
    first_Max["finish"] = 0;
    for(map<string, int>::size_type times = 0; times != word_map.size(); times++){
        Max = first_Max.begin();
        for(map<string, int>::iterator num = word_map.begin(); num != word_map.end(); num++){
            if(num->second > Max->second)
                Max = num;
        }
        cout << Max->first << "t" << Max->second <<" 次"<<endl;
        finish[Max->first] = Max->second;
        word_map.erase(Max);
    }
}
statistics::statistics()
{
}
statistics::~statistics()
{
}
————————————————
版权声明:本文为CSDN博主「AutoCar_player」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/AutoCar_player/article/details/102995713

原文链接: https://www.cnblogs.com/ai-player/p/11830525.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

    [C++]查询文本中所有单词出现的频率,并且根据出现次数由多到少依次排列。

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/305728

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月16日 上午3:03
下一篇 2023年2月16日 上午3:03

相关推荐