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来读写文件。写这个程序我是很吃力的,特别是看到题目出来没两天,就已经提交的同学的报告,而我却毫无头绪,深深地感到自己与他人的差距,即使程序写完的现在,我还是有一些地方没弄懂,报告也写的比较简单。由此,我还需要更多的学习来补足自己的漏洞。

浙公网安备 33010602011771号