Github地址c++
WordCountgit
PSP表格github
PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|---|
Planning | 计划 | ||
· Estimate | · 估计这个任务须要多少时间 | 5 | 5 |
Development | 开发 | ||
· Analysis | · 需求分析 (包括学习新技术) | 30 | 30 |
· Design Spec | · 生成设计文档 | 30 | 0 |
· Design Review | · 设计复审 | 20 | 20 |
· Coding Standard | · 代码规范 (为目前的开发制定合适的规范) | 20 | 20 |
· Design | · 具体设计 | 30 | 30 |
· Coding | · 具体编码 | 120 | 240 |
· Code Review | · 代码复审 | 20 | 60 |
· Test | · 测试(自我测试,修改代码,提交修改) | 60 | 120 |
Reporting | 报告 | ||
· Test Repor | · 测试报告 | 30 | 30 |
· Size Measurement | · 计算工做量 | 10 | 10 |
· Postmortem & Process Improvement Plan | · 过后总结, 并提出过程改进计划 | 30 | 30 |
合计 | 345 | 595 |
代码的实现算法
各函数的关系图以下:数组
main()函数数据结构
主要负责文本文件的读入,调用其余函数及参数传递,并输出函数返回的结果。函数
c_char()函数性能
接受main()函数传入的文本字符串,统计文本中的有效字符数并返回。学习
c_line()函数测试
接受main()函数传入的文件路径,打开文件,以按行读入的方式统计文本的行数并返回。
c_word()函数
本程序的最关键的部分,用了最直接的遍历判断法。
从首字符开始遍历,利用char_judge()函数判断当前字符是不是字母:
若不是字母,则判断下一字符;
如果字母,则进入word_judge()函数判断当前字母后的三位字符是不是字母:
若其后三位均是字母,则符合“单词”条件,单词数加1,进入单词合成循环将其后的字符合并成一个单词知道遇到非法字符为止,并将单词加入字符串数组word[i]存储;
如有一位不是字母,则不符合“单词”条件,返回检测过的单词数num,上层循环参数跳num位,再次执行循环。
遍历结束后跳出循环,获得合法单词数并返回主函数,同时将合法单词合成后存入字符串数组word[i],方便单词频率统计。
word_print()函数
利用word[i]数组中已存储的单词,遍历后,去掉重复单词,并统计出每一个单词的频率,以及单词的acill码值和,做为排序条件;
用了最简单但并不快捷的冒泡排序,以单词频率做为首要排序条件,以单词的acill码值和做为次要排序条件,对单词进行排序;
排序后,输出排名前10的单词,以及其频率;
代码性能
一开始使用c++输入输出流函数来输出,单次测试总执行时间达到了20s+;
因而,改用printf函数来输出,单次测试结果以下:
单次执行后时间变成了12s+,有了很多的提高;
其他可改进的地方还有不少,好比:更好的数据结构、更好的排序算法等等,但由于时间缘由来不及改进,后面会继续改进。
体会和感想
以前代码被本身荒废了好久,此次也算是经过此次做业捡起来一些,固然过程就显得比较曲折。
在时间花费上,主要在编码和Github的使用上花费了不少不少时间:
编码问题是由于长期荒废,遗忘和手生致使了编码过程磕磕绊绊;
Github的使用出现了很多问题,到最后莫名出现了commit失败没法提交的问题,到如今也没有解决,因此只能是提交第一版比较粗糙的代码。
但整体来说,仍是有很大的收获,捡起了荒废了好久的代码,让我有一个新的开始;看过了别人的博客和代码,让我认识到本身的不足;一次次程序的debug、Github的崩溃、软件功能的学习,让我受益不浅;还有,就是如今最后时刻的博客编辑,锻炼了我良好的心态~