柯源-20200917-2 词频统计

此作业要求参见https://edu.cnblogs.com/campus/nenu/2020Fall/homework/11206

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

希望实现以下效果。以下效果中数字纯属编造。

功能1 小文件输入。 为表明程序能跑,结果真实而不是迫害老五,请他亲自键
盘在控制台下输入命令。

答:

执行效果:

 

 重要代码:

1 if((temp[i]>='a'&&temp[i]<='z')||(temp[i]>='A'&&temp[i]<='Z'))count++;                       
2 else if(count)                      
3 {
4     str=temp.substr (i-count,count);  
5     if(v.size ())                  
6 {    

为了评估老五的词汇量而不是阅读量,total一项中相同的单词不重复计数数,出现2
次的very计数1次。

因为用过控制台和命令行,你早就知道,上面的">"叫做命令提示符,是操作系统的一部分,而不是你的程序的一部分。

此功能完成后你的经验值+10.

功能2 支持命令行输入英文作品的文件名,请老五亲自录入。

答:

执行效果:

 

 

 重要代码:

 1 for(j=0;j<v.size ();j++)
 2 {
 3     if(str.compare(v[j].word )==0)
 4     {
 5         v[j].num ++;          
 6         count=0;             
 7         break;
 8     }
 9 }
10 if(j>=v.size ())                  
11 {
12     tempstr.word = str;
13     tempstr.num =1;
14     v.push_back (tempstr);
15     count = 0;                   
16 } 

此功能完成后你的经验值+30. 输入文件最大不超过40MB. 如果你的程序中途崩
了,会被老五打脸,不增加经验值。

功能3 支持命令行输入存储有英文作品文件的目录名,批量统计。
>dir folder
gone_with_the_wand
runbinson
janelove
>wf folder
gone_with_the_wand
total 1234567 words
the 5023
a 4783
love 4572
fire 4322
run 3822
cheat 3023
girls 2783
girl 2572
slave 1322
buy 822
----
runbinson
total 1234567 words

答:

执行效果:

 

 重要代码:

 1 fp = fopen(fa.name, "r");
 2 for (i = 0; i < 500; i++)
 3 {
 4    (w + i)->num = 1;
 5 }
 6 if (i == (p * 500)) 
 7 {
 8     p++;
 9     w = (struct fre_word*)realloc(w, 500 * p*(sizeof(struct fre_word)));
10     for (n = i; n <= 500 * p; n++)  (w + n)->num = 1;
11 }                

因为单词量巨大,只列出出现次数最多的10个单词。
此功能完成后你的经验值+8.

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

答:

执行结果:

 

 重要代码:

1 if (_access(argv[2], 0) == -1) {
2     printf("'%s' not found!\n", argv[2]);
3     return -1;
4 }
5 char *read_file = open_file(argv[2]);
6 count_words(read_file);

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

代码片断要求1 凡不缩进的,此题目拒绝接收。不知道什么是“缩进”的同学,请自行补课,不接受以“不知道”作为理由。
代码片断要求2 要求使用cnblogs代码控件,参见往届同学黄兴、宫成荣的作业。凡粘贴IDE中的代码截图,或者贴文字而没有关键字高亮或彩色的,0分。

答:

1.在实现功能一时,对于遗忘的文件有关知识进行回顾,查阅了很多资料,测试了一些代码,得到相关经验才完成此题。

2.功能二对比功能一而言,对于数据的读取方式有了改变,在此方面做了一些功课。

3.功能三在编程时,改完程序之后发现输出的内容没有对应上,又改变了输出的格式。

4.在完成功能四之前,学习了一些关于重定向的知识。

PSP
(8分)

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

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

类别 预计花费时间 实际花费时间 时间差值 原因
功能一 180 311 131 对c语言文件部分知识点缺失
功能二 30 55 15 对于total统计数据的调正
功能三 30 61 31 改变输出方式
功能四 30 77 47 重定向的知识掌握不足
测试 90 131 41 对git平台不够了解

 

 

 

 

 

 

 

代码及版本控制
(5分。虽然只有5分,但此题如果做错,因为教师得不到你的代码,所以会导致“功能实现”为负分。)

代码地址:https://keyuan1.coding.net/p/words/d/words/git/tree/master/wordcount

posted @ 2020-09-23 17:27  柯源  阅读(216)  评论(0)    收藏  举报