作业之词频统计
Posted 沈柏杉
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了作业之词频统计相关的知识,希望对你有一定的参考价值。
项目需求:
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 String 10 { 11 public: 12 //初始化词频初始值为1 13 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 //匹配到相同的词汇,词频数加1 34 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 }
输入文件截图 看老师说要篇幅大的,于是加了一个英文散文?随便网上找的
输出结果截图
以上是关于作业之词频统计的主要内容,如果未能解决你的问题,请参考以下文章