码迷,mamicode.com
首页 > 其他好文 > 详细

作业之词频统计

时间:2016-09-06 19:48:17      阅读:146      评论:0      收藏:0      [点我收藏+]

标签:

 

 项目需求:

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 }

 

输入文件截图       看老师说要篇幅大的,于是加了一个英文散文?随便网上找的技术分享

输出结果截图

技术分享

作业之词频统计

标签:

原文地址:http://www.cnblogs.com/shenbaishan/p/5846954.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!