首页 > 代码库 > 作业之词频统计
作业之词频统计
项目需求:
1编一程序,统计一篇英文文章中各单词出现的次数。
2输入:英文文章,为文本文件,扩展名.txt
3输出:按次数降序排列
设计如下。
1 #pragma warning (disable:4996) 2 #include <iostream> 3 #include <map> 4 #include <vector> 5 #include <algorithm> 6 7 using namespace std; 8 9 class String10 {11 public:12 //初始化词频初始值为113 String(char *Word) :Frequency(1)14 {15 //存放单词的数组16 Word_Point = new char[strlen(Word) + 1];17 //将word复制到Word_Point数组18 strcpy(Word_Point ,Word);19 }20 char *Word_Point;21 //声明词频变量22 int Frequency;23 24 bool operator<(String STR);25 ~String(){}26 };27 //重载函数28 //可实现词频的降序输出29 bool String::operator<(String STR){ return Frequency > STR.Frequency;}30 31 vector<String> Sort_Word;32 33 //匹配到相同的词汇,词频数加134 void If_Repet(char *WordP)35 {36 vector<String>::iterator iter;37 for (iter = Sort_Word.begin(); iter != Sort_Word.end() ;iter++)38 if (!strcmp(iter->Word_Point, WordP))39 {40 iter->Frequency++;41 return;42 }43 Sort_Word.push_back(String(WordP));44 }45 //读取article.txt文档,进行单词的分词46 void Catch_Letter(void)47 {48 //动态分配内存49 char *Wor_Po = (char *)malloc(4);50 //读取article.txt文档51 FILE *Article = fopen("E://aa.txt", "r");52 char *Letter_Point;53 //进行单词的分词54 while (!feof(Article))55 {56 fscanf(Article, "%s", Wor_Po);57 Letter_Point = Wor_Po;58 while (*Letter_Point++)59 {60 if (*Letter_Point == ‘,‘ || *Letter_Point == ‘.‘)61 *Letter_Point = 0;62 }63 If_Repet(Wor_Po);64 }65 }66 67 void main(void)68 {69 //调用Catch_Letter() 函数70 Catch_Letter();71 //sort函数,将起,终点范围内的区域进行排序,默认升序输出72 sort(Sort_Word.begin() ,Sort_Word.end());73 //完成输出动作74 for (vector<String>::iterator iter = Sort_Word.begin(); iter != Sort_Word.end(); iter++)75 {76 printf("Word : %-15s Frequency :%d\n", iter->Word_Point, iter->Frequency);77 78 }79 getchar();80 }
输入文件截图 看老师说要篇幅大的,于是加了一个英文散文?随便网上找的
输出结果截图
作业之词频统计
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。