Github项目地址:
https://github.com/czhasd123/PersonProject-C/tree/master/031602308%2B%E9%99%88%E5%AD%90%E6%81%92/src
PSP表格:
PSP2.1 | ersonal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|---|
Planning | 计划 | ||
Estimate | 估计这个任务需要多少时间 | 600 | 900 |
Development | 开发 | ||
Analysis | 需求分析 (包括学习新技术) | 300 | 360 |
Design Spec | 生成设计文档 | 30 | 30 |
Design Review | 设计复审 | 30 | 40 |
Coding Standard | 代码规范 (为目前的开发制定合适的规范) | 30 | 30 |
Design | 具体设计 | 60 | 120 |
Coding | 具体编码 | 120 | 150 |
Code Review | 代码复审 | 60 | 60 |
Test | 测试(自我测试,修改代码,提交修改) | 30 | 90 |
Reporting | 报告 | ||
Test Repor | 测试报告 | 30 | 30 |
Size Measurement | 计算工作量 | 20 | 20 |
Postmortem & Process Improvement Plan | 事后总结, 并提出过程改进计划 | 20 | 30 |
合计 | 730 | 960 |
解题思路:
刚看到题目的时候还是比较懵的,不过只要懂得文件的读取写入,c++的按字统计和按行统计应该可以实现,在舍友的提醒下,我了解到了用map来实现单词的计数,但单靠map,单词的统计和排序就有点问题,通过查阅,发现可以通过map的value值排序来实现,具体方法是将其存入vector,用sort定义从大到小的排序来实现。
代码详情:
几个关键的头文件:
map的头文件<map>,vector的头文件,读取和写入文件的头文件fstream和sstream。
行数的统计:
关键在于用getline读取一行的数据,定一个判断,如果用getline读取的temp字符串为空,则跳过,非空则计数n加1.
字符数的统计:
思路类似于行数的统计,不过需要加一行Readfile>>noskipws,令其强制读取空格和回车,定一个判断,如果没有读到介绍,则计数m加1.
单词的排序、统计以及字典序输出文本:
PS:由于一些原因,本人暂时将单词统计、排序和字典序输出写在主函数里,日后有时间会进行改进。
定义map型words来记录单词及其个数,ifstream定义读取in,设置一个判断,如果从文本文件中读入字符数组temp的最后一个字符不是字母数字,则结束读取这个单词,并将单词中的大写字母转成小写,然后存入words。
定义vector,将map的单个单词及数目存入vector容器并进行字典排序。
这时先不急着进行value的排序,按照题目要求,将map存的单词按字典序输出到result.TXT。
在主函数外,定义一个cmp的从大到小的sort的比较模式。
用定义的sort排序从大到小对map的value值进行排序,并统计数目,设置一个初值为0的i,每输出一个值,i加1,但i到达10时,停止输出。
测试样例:
ps:这里每一行都有用换行符隔开。
输出结果:
输出文本结果:
心得与感悟:
这次作业比起之前的c的作业相比都有着很大的挑战,一开始我其实并不了解怎么从命令行输入,或者如何用c来读取、写入文件等等,通过这次的作业,我从网络上和同学那里学到很多关于的统计和排序的知识,知道怎么用map和vector,学会了怎么用c来读写文件。写这个程序我是很吃力的,特别是看到题目出来没两天,就已经提交的同学的报告,而我却毫无头绪,深深地感到自己与他人的差距,即使程序写完的现在,我还是有一些地方没弄懂,报告也写的比较简单。由此,我还需要更多的学习来补足自己的漏洞。