Github项目地址:

https://github.com/czhasd123/PersonProject-C/tree/master/031602308%2B%E9%99%88%E5%AD%90%E6%81%92/src

PSP表格:

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

 

posted on 2018-09-12 21:33  啪啪逗比  阅读(173)  评论(1编辑  收藏  举报