作业要求 20180918-1 词频统计

此作业的要求参见[https://edu.cnblogs.com/campus/nenu/2018fall/homework/2126]

代码【https://coding.net/u/liuyy0817/p/count_words/git

词频统计 SPEC 20180918

老五在寝室吹牛他熟读过《鲁滨逊漂流记》,在女生面前吹牛热爱《呼啸山庄》《简爱》和《飘》,在你面前说通读了《战争与和平》。但是,他的四级至今没过。你们几个私下商量,这几本大作的单词量不可能低于四级,大家听说你学习《构建之法》,一致推举你写个程序名字叫wf,统计英文作品的单词量并给出每个单词出现的次数,准备用于打脸老五。

功能1 小文件输入。

为表明程序能跑,结果真实而不是迫害老五,请他亲自键盘在控制台下输入命令。为了评估老五的词汇量而不是阅读量,total一项中相同的单词不重复计数,出现2次的very计数1次。

功能2 支持命令行输入英文作品的文件名,请老五亲自录入。输入文件最大不超过40MB. 如果你的程序中途崩了,会被老五打脸,不增加经验值。

功能3 支持命令行输入存储有英文作品文件的目录名,批量统计。因为单词量巨大,只列出出现次数最多的10个单词。

功能4 从控制台读入英文单篇作品,这不是为了打脸老五,而是为了向你女朋友炫耀,表明你能提供更适合嵌入脚本中的作品(或者如她所说,不过是更灵活的接口)。如果读不懂需求,请教师兄师姐,或者 bing: linux 重定向,尽管这个功能在windows下也有,搜索关键词中加入linux有利于迅速找到。

1、发表博客,介绍上述“项目”中每个功能的重点/难点,展示重要代码片断,给出执行效果截图,展示你感觉得意、突破、困难的地方。

点难点:

1)命令行参数

每个C语言程序都必须有一个称为main()的函数,作为程序启动的起点。当执行程序时,命令行参数(command-line argument)(由shell逐一解析)通过两个入参提供给main()函数。第一个参数int argc,表示命令行参数的个数。第二个参数char *argv[],是一个指向命令行参数的指针数组,每一参数又都是以空字符(null)结尾的字符串。第一个字符串,亦即argv[0]指向的,(通常)是该程序的名称。argv中的指针列表以NULL指针结尾(即argv[argc]为NULL)。

2)如何分词(字母,连词符,换行号算作单词,其余算分词)

1     for (int i = 0; i<len; i++)
2         {
3             if (isalpha(temp[i]) || temp[i] == '-' || temp[i] == '\'')
4             {
5                 tmp[j] = temp[i];
6                 j++;
7             }
8 
9         }

3)如何按词频大小输出(把map里的数据存到vector里,然后排序)

 1 void display_maps(map<string, int> &wmap)   //把数据存到map里进行排序 
 2 {
 3     map<string, int>::const_iterator map_it;
 4     int tot = 0;
 5     for (map_it = wmap.begin(); map_it != wmap.end(); map_it++)
 6         tot++;
 7     cout << "total " << tot << endl;
 8     cout << endl;
 9     vector<PAIR> name_number_vec(wmap.begin(), wmap.end());
10     sort(name_number_vec.begin(), name_number_vec.end(), CmpByValue());
11     for (int i = 0; i != name_number_vec.size(); ++i) {
12         if (i>9)
13             break;
14         cout << setw(10) << name_number_vec[i].first << setw(6) << name_number_vec[i].second << endl;
15     }
16 }

执行效果图

功能1

 

功能2

功能3功能4未能实现。

 

2、在同一篇博客中,参照教材第35页表2-2和表2-3,为上述“项目”制作PSP阶段表格。
PSP阶段表格第1列分类,如功能1、功能2、测试功能1等。

要求1 估算你对每个功能 (或/和子功能)的预计花费时间,填入PSP阶段表格,时间颗粒度为分钟。
要求2 记录词频统计项目实际花费时间,填入PSP阶段表格,时间颗粒度要求分钟。
要求3 对比要求1和要求2中每项时间花费的差距,分析原因。

PSP表格

分类 预计花费时间 实际花费时间
功能1 120 198
功能2 60 108
功能3 180 323,未完成
功能4 120 225,未完成

总结:由于基础差,太久没编程等种种原因,这个项目我做起来很吃力,完全达不到老师要求的效果,然后我请教了高远博学长,在学长的帮助下,我实现了前两个功能,在此,我要感谢高远博学长对我帮助。这次作业也教会我,要继续努力,不会的地方要多去向学姐学长请教,他们每个人都会教会我许多东西,自己一个人闭门造车是没有用的,只会浪费时间。

 

posted on 2018-09-24 21:12  刘莹莹  阅读(269)  评论(0编辑  收藏  举报