作业之词频统计

时间:2022-01-13 21:56:46

 

 项目需求:

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 }

 

输入文件截图       看老师说要篇幅大的,于是加了一个英文散文?随便网上找的作业之词频统计

输出结果截图

作业之词频统计