作业之词频统计

 项目需求:

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
", iter->Word_Point, iter->Frequency);
77         
78     }
79     getchar();
80 }

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

输出结果截图

作业之词频统计