202103226-1 编程作业
Gitee项目地址
https://gitee.com/gt250/project-c/tree/master/20188486
https://gitee.com/gt250/project-c
PSP表格
PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|---|
Planning | 计划 | 10 | 60 |
Estimate | 估计这个任务需要多少时间 | 480 | 600 |
Development | 开发 | 120 | 150 |
Analysis | 需求分析 (包括学习新技术) | 180 | 180 |
Design Spec | 生成设计文档 | 30 | 45 |
Design Review | 设计复审 | 5 | 5 |
Coding Standard | 代码规范 (为目前的开发制定合适的规范) | 30 | 0 |
Design | 具体设计 | 30 | 20 |
Coding | 具体编码 | 180 | 150 |
Code Review | 代码复审 | 30 | 15 |
Test | 测试(自我测试,修改代码,提交修改) | 30 | 30 |
Reporting | 报告 | 60 | 60 |
0Test Repor | 测试报告 | 60 | 10 |
Size Measurement | 计算工作量 | 0 | 0 |
Postmortem & Process Improvement Plan | 事后总结, 并提出过程改进计划 | 20 | 5 |
合计 | 1265 | 1340 |
解题思路描述
每次从文件中读取一行,放到缓冲区buffer,然后遍历缓冲区,统计当前行的字符和单词数。
然后通过top10word函数进行计数排序,对不同的单词进行标记技术
设计与实现过程
①行遍历,判断空格等字符,计算行数,字符数,单词数
while(fgets(buffer, 1003, fp) != NULL){
bufferLen = strlen(buffer);
// 遍历缓冲区的内容
for(i=0; i<bufferLen; i++){
c = buffer[i];
if( c==' ' || c=='\t'){ // 遇到空格
!isLastBlank && wordNum++; // 如果上个字符不是空格,那么单词数加1
isLastBlank = 1;
}else if(c!='\n'&&c!='\r'){ // 忽略换行符
charNum++; // 如果既不是换行符也不是空格,字符数加1
isLastBlank = 0;
}
}
②排序函数,以及单词本
typedef struct Word{
char s[20];
int num;
} Word;
int cmp(const void *a,const void*b){
struct Word*a1=(Word *)a;
struct Word*b1=(Word *)b;
return b1->num-a1->num;
}
③函数
int *getCharNum(char *filename, int *totalNum);
int top10Word();
qsort(word,m,sizeof(Word),cmp);
性能改进
一开始无法实现top10word的功能准备放弃,但还是查询了资料,以及寻求了周围朋友的帮助。
帮助我进行了思路的梳理,以及代码的书写,还是勉强的实现了单词排序;
单元测试
①在网络上找了一个测试数据
②运行成功的截图
异常处理说明
①加入top10word函数以后无法输出,输出的只有总行数、字符以及单词
检查发现没有定义函数,导致无法调用函数;
②还是无法输出
主函数下未调用函数进行输出;
心路历程与收获
还挺崩溃的,一直想放弃,实在做不下去了
gitee码云仓库和本地仓库的连接,尝试了好几天,无法连接,之后一直在找以前的资料,然后百度看各种文章,也算是在作业快截止的时候完成了连接,当时觉得怎么连接push比写代码还难,也是自己学艺不精,专业能力太差了,对作业感到无从下手完成起来也很吃力,没有头绪。
在不断尝试中,还是有积极的去寻找解决方案,还是没有轻易的放弃,尽管自己不停的抱怨,但是好在自己也是坚持下来了,不断请教别人,周围的人都很好,不管是助教还是同学有问题都会做解答,还是很方便。