【C++】词频排序
来源:互联网 发布:1962年印度战争 知乎 编辑:程序博客网 时间:2024/06/08 19:48
功能要求:
1. 设计一个统计英文文章词频的程序。该程序能够从一个输入文件(文本文件)读取一篇英文文章的内容,并统计每个单词出现的次数。程序在读取单词时应当将标点符号排除在外,且不区分英文字母的大小写(例如:China 与china 视为同一个单词)。此外,在统计词频时,有些英文单词(例如a、an、the、of)需要排除在外,由另一个输入文件定。该程序能够将统计后的词频列表输出到两个文件,一个按照词典顺序排序,另一个按照词频排序(倒序)。该程序应当使用C++标准库提供的容器。
1. 设计一个统计英文文章词频的程序。该程序能够从一个输入文件(文本文件)读取一篇英文文章的内容,并统计每个单词出现的次数。程序在读取单词时应当将标点符号排除在外,且不区分英文字母的大小写(例如:China 与china 视为同一个单词)。此外,在统计词频时,有些英文单词(例如a、an、the、of)需要排除在外,由另一个输入文件定。该程序能够将统计后的词频列表输出到两个文件,一个按照词典顺序排序,另一个按照词频排序(倒序)。该程序应当使用C++标准库提供的容器。
2. 设计一个能够按照自定义的方式比较两个字符串大小的函数对象,比较规则:给定两个字符串a 与b,若a 的长度小于b 的长度,则a < b(例如pig < mouse);若a 的长度大于b 的长度,则a > b(例如mouse > pig);若a 的长度等于b 的长度,则它们之间的大小关系由词典顺序决定,例如(cat < pig)。将上述英文文章里出现的单词放置到一个vector 容器中,并调用C++标准库提供的泛型算法对其中的string 元素进行排序(排序基于上面描述的自定义字符串大小关系),将排序后的字符串列表输出到另一个文件。
输入文件:
C:\1_in_1.txt:英文文章。
C:\1_in_2.txt:统计词频时需排除的词汇列表(每行一个单词)。
输出文件:
C:\1_out_1.txt:以词典顺序排序的词频列表(每行一个单词及其词频,以空格隔开)。
C:\1_out_2.txt:以词频排序(倒序)的词频列表(每行一个单词及其词频,以空格隔开)。
C:\1_out_3.txt:按照自定义方式排序的字符串列表(每行一个单词)。
#include <iostream>#include <fstream>#include <cstdlib>#include <map>#include <string>#include <vector>#include <algorithm>#include <cctype>using namespace std;bool sm(const pair<string,int>& x,const pair<string,int>& y);void sortm(map<string,int>& tm,vector<pair<string,int>>& tv);void sorts(vector<string>&t,map<string,int>&tm);bool com(string &s1,string &s2);int sest(int a,int b);string disti(string &origi);string ignore(string &origi);//若同时出现除首字母大小写之外其余均相同的单词,则按小写排序int main(){ifstream inFile;inFile.open("C:\\1_in_1.txt");if(!inFile.is_open()){cout <<"Could not open the file."<<endl;exit(EXIT_FAILURE);}string r;map<string, int> word;map<string, int>::iterator j;vector<pair<string,int>> tv; vector<string>ts;if(inFile.good()){while(inFile>>r){r = disti(r);r = ignore(r);word[r]++;}inFile.close();}ofstream outFile,outfile,Outfile;outFile.open("C:\\1_out_1.txt");outfile.open("C:\\1_out_2.txt");Outfile.open("C:\\1_out_3.txt");ifstream infile;infile.open("C:\\1_in_2.txt");if(!infile.is_open()){cout <<"Could not open the file."<<endl;exit(EXIT_FAILURE);}if(infile.good()){while(infile>>r){r = disti(r);r = ignore(r);word.erase(r);}infile.close();}sortm(word,tv); for(j=word.begin();j!=word.end();j++)outFile << j->first << "" << j->second << endl;int n = tv.size();for(int i=n-1;i>0;i--) { outfile<<tv[i].first<<""<<tv[i].second<<endl; } sorts(ts,word);int u = ts.size();for(int k=0;k<u;k++){Outfile<<ts[k]<<endl;}outFile.close(); outfile.close();Outfile.close();return 0;}string ignore(string &origi){ origi[0]=tolower(origi[0]); return origi;}string disti(string &origi)//防止有单词中间有分隔符的情况{int a = origi.length();string s1,s2,s3;int b = (int)(origi[0]);if(b<65||(b>=91&&b<=96)||b>122){ for(int i = 0;i<a-1;i++) origi[i] = origi[i+1];}int c = (int)(origi[a-1]);if(c<65||(c>=91&&c<=96)||c>122){origi[a-1] = '\0';}return origi;}bool sm(const pair<string,int>& x,const pair<string,int>& y) { return x.second < y.second; } void sortm(map<string,int>& tm,vector<pair<string,int>>& tv) { for(map<string,int>::iterator it=tm.begin();it!=tm.end();it++) { tv.push_back(make_pair(it->first,it->second)); } sort(tv.begin(),tv.end(),sm); }int sest(int a,int b){if(a<b)return a;else return b;}bool com(string &s1,string &s2){int c = s1.length();int d = s2.length();if(c>d)return true;else if(c==d){for(int i = 0;i<sest(c,d);i++){if(s1[i]>s2[i])return false;else if(s1[i]<s2[i])return true;}}else return false;} void sorts(vector<string>&t,map<string,int>&tc){for(map<string,int>::iterator ot=tc.begin();ot!=tc.end();ot++){t.push_back(ot->first);}sort(t.begin(),t.end(),com);}
0 0
- 【C++】词频排序
- hadoop编程:词频排序
- c语言 词频统计
- ElasticSearch安装及词频排序
- Huffman 统计词频(C#)
- C语言实现 词频统计
- 词频统计程序(C语言/C++)
- hadoop 中文词频排序 top-k 问题
- hadoop中文分词、词频统计及排序
- Trie树:统计词频、排序、查找
- 实用工具:词频统计&出现位置&排序
- C语言实现英文文本词频统计
- 统计英文单词词频(c版)
- c++ 统计英文文本中每个单词的词频并且按照词频对每行排序
- c++ 统计英文文本中每个单词的词频并且按照词频对每行排序
- 【Linux】【C/C++】多进程协同词频统计
- 【java】统计文本文件中词频,以字典序排序
- spark helloworld (wordCount实现并按照词频排序)
- 【C++】OJ612
- 【C++】简单航班查询系统
- 软件工程研究领域最顶级的两个期刊
- 只有一条路不能选择——那就是放弃的路;只有一条路不能拒绝——那就是成长的路
- 【C++】简易交通查询系统
- 【C++】词频排序
- 【C++】模版矩阵类
- 【C++】几何形状类
- NTP时间同步配置
- 浙大PAT 1042题 1042. Shuffling Machine
- UVA 1432 - Fire-Control System(技巧枚举+线性扫描)
- Reorder List
- 使用类前置声明的好处-结合Qt 4一个主窗口实例讲解
- Windows7配置QT-Android开发环境!