柯源-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

浙公网安备 33010602011771号