软件工程第一次个人项目——词频统计by11061153柴泽华
一.预计工程设计时间
明确要求: 15min;
查阅资料: 1h;
学习C++基础知识与特性: 4-5h;
主函数编写及输入输出部分: 0.5h;
文件的遍历: 1h;
编写两种模式的词频统计函数: 1.5h;
单词排序部分: 0.5h;
程序调试与测试: 1-2h;
程序优化:2h;
预计总共时间:12-13h;
二.实际工程完成时间
明确要求: 15min;
查阅资料: 1.5h;
学习C++基础知识与特性: 7h;
主函数编写及输入输出部分: 0.5h;
文件的遍历: 0.5h;
编写两种模式的词频统计函数: 1h;
单词排序部分: 1h;
程序调试与测试: 2h;
程序优化:3h;
实际总共完成时间:17h
三.程序优化
由于是第一次使用vs2012,因此对它的操作还没有很熟悉。刚开始分析程序采样时,总是显示数据无法采样,后来上网查询原因后,的只是由于自己的测试用例太小了,因此找同学借了一个大小为10M左右的英文小说文件夹来测试。
文件夹截图如下所示:

性能分析报告:无任何警告或错误


总体上来说,程序的时间效率还是有些低,希望这次作业后能和老师和同学们讨论关于这道题时间复杂度最低的算法,互相促进,共同进步。


通过以上两张图,我们可以发现main函数的主要耗时是花费在WordCounter函数上了,占到了99.8%,而WordCounter函数中的绝大多数时间则是花费在了operator>>上,即大量的字符操作处理上。因此下一步的优化重点可以放在简化字符操作处理上面,现在暂时还没有想到更好的方法。
这次排序中用到的是<algorithm.h>下的sort函数,只要定义好了其中的比较规则cmp函数,就可以按照自己的意愿排序wordmap中的单词。存储单词及其个数时用到的是map关联容器,这种C++特有的数据结构大大的简化了插入操作,更新操作的实现,也使后续的排序工作方便了许多。
文件的遍历输入采用的方法是使用system函数输入命令行,这样就可以递归地得到某目录下的所有需要的文件。该命令行为
dir filepath*.txt filepath*.cs filepath*.cpp filepath*.h /b /s
其中filepath指代的是命令行中输入的目录。(切记一定要以\\结尾)
文件的输出则是使用的pair变量迭代器挨个取map中的元素进行打印。
四.测试用例
1.空文件夹进行边界测试
2.大容量文件夹,进行压力测试
3.多层文件夹嵌套测试
4.文件中存在特殊字符测试
5.简单模式下对形如File,file等字符串的个数统计与大小比较
6.复杂模式下所要求的比较,例如windows7,windows8,windows
7.空文件进行边界测试
8.支持读文件类型后缀名测试
9.字典序测试
10.不合法单词是否被统计测试
五.感悟与收获
这次词频统计程序作业是我第一次接触C++编程,还好有过C和Java的程序设计经验,因此学习的时候只是看了一下C++特有的数据结构和语法,然后就可以开始编程了。
这次作业带给我的最大感悟就是不要把计划想得太理想。因为在现实实现的过程中,你可能会遇到各种意想不到的突发情况,因此你在事先计划的时候,一定要留出一定的余量并且做好良好的心理准备。这次作业时写代码其实并不是最耗费时间的一项工作,最耗费时间的反而是完成代码后的debug和代码优化。我想这也正是软件工程课的目的,它并不是一门普通的程序设计课或算法课,他要教给我们的是编写软件所要经过的所有必备流程以及必备方法。只有了解了这些流程和方法,才能将我们编写的普通小程序升级为软件。
还有一点,就是要常常吸取别人好的想法。比如编写这次作业时,文件的遍历处理过程当然可以使用深度优先搜索或广度优先搜索来完成,但是,如果你使用一行命令行代码的话,你会发现这将大大减小你的编码难度以及减少你程序的运行时间。这种好想法可能你永远也不会想到,因此多多倾听别人的想法,必然是有着大大的益处。
软件工程第一次个人项目——词频统计by11061153柴泽华的更多相关文章
- 个人项目-词频统计(语言:C++)
词频统计 (个人项目) 要求 (1). 实现一个控制台程序,给定一段英文字符串,统计其中各个英文单词(4字符以上含4字符)的出现频率. 附加要求:读入一段文本文件,统计该文本文件中单词的频率. (2) ...
- 作业3-个人项目<词频统计>
上了一天的课,现在终于可以静下来更新我的博客了. 越来越发现,写博客是一种享受.来看看这次小林老师的“作战任务”. 词频统计 单词: 包含有4个或4个以上的字 ...
- 个人项目----词频统计WEB(部分功能)
需求分析 1.使用web上传txt文件,对上传的txt进行词频统计. 2.将统计后的结果输出到web页面,力求界面优美. 3.在界面上展示所给url的文章词频统计,力求界面优美. 3.将每个单词同四. ...
- 结对项目— 词频统计2(语言C++)
结对对象:季天梦 博客地址:http://www.cnblogs.com/jitianmeng/ github链接:https://github.com/liuyutianlyt/EX_4.md 比例 ...
- 结对项目— 词频统计(语言C++)
结对对象:季天梦 博客地址:http://www.cnblogs.com/jitianmeng/ github链接:https://github.com/liuyutianlyt/EX_4.md 比例 ...
- task4:结对项目-词频统计
结对人:周楠 思路:利用TreeMap实现key字典序,然后输出到LinkedList,然后用Comparator,实现字典值从大到小排序,但是key实现值相同的key字典序的想出的实现方法,但是一直 ...
- HW—词频统计
第一次个人作业——词频统计 第一次做这种大作业,明显感觉陌生,各种规范和技能也是第一次使用,希望自己好运. 目录:一.基本要求 二.需求分析及时间估计 三.实现思路及过程 四.测试用例.时间性能分析及 ...
- USTC《现代软件工程》春季学期——第一次个人作业:词频统计
截止日期 2018年3月29日23:59 要求 1. 对源文件(*.txt,*.cpp,*.h,*.cs,*.html,*.js,*.java,*.py,*.php等,文件夹内的所有文件)统计字符数. ...
- C# 词频统计 东北师范大学 软件项目管理 第一次作业
一.作为杨老师的学生第一次听杨老师讲课,印象最深的就是:工程中所有步骤之间是乘法,如果任何一步为0,工程就做不出来了.以前所有老师讲到的都是不要太在乎结果,努力的过程很重要,但是这在软件工程中不合适了 ...
随机推荐
- 学习webView控件使用
WebView 对象用于网页显示使用,简单的学习并使用了一下. 1.首先在 layout 中摆一个全屏的 webview 控件 (main.xml ) <?xml version="1 ...
- MariaDB10.2.X-新特性2-支持check约束and with as
前几天写了一篇MariaDB10.2支持分析函数,大家印象中MySQL不支持with as ,check约束,那么MariaDB10.2也同样给你惊喜 1.with as MariaDB [test1 ...
- uvaIrrelevant Elements
唯一分解定理. 可以看出在最后每个a的系数是杨辉三角的第n行. 但是不能递推,否则会tle. 就从C(n-1,0)开始乘n-k再除以k.记录下每个的系数,如果该项系数小于m就代表和答案有关. 代码里的 ...
- c#里面的namespace基础(一)
我现在感到学好C#就是就是要知道,C#的基本语法,C#的新的特点,C#能干什么! 其中我感到不管如何,NAMESPACE都是很关键的,可以说不是只对C#而言,而是整个.NET都是由NAMESPACE组 ...
- UVa 1153 Keep the Customer Satisfied 【贪心 优先队列】
题意:给出n个工作,已知每个工作需要的时间last,以及截止时间end,(必须在截止时间之前完成)问最多能够完成多少个工作 首先预处理,将这n件任务按照截止时间从小到大排序 然后用一个cur记录当前做 ...
- Qt 多线程学习
最近的项目上用到了关于多线程的知识,自己也比较感兴趣,所以就拿了那本<C++ GUI Qt4 编程>来学习. 这本书的第14章是关于多线程的知识,使用的Qt版本是Qt4.x.在下用的是最新 ...
- Servlet,JDBC,JSONObject三者配和处理客户端请求并返回正确的json数据
JSON简介 首先我们来理解json(JavaScript Object Notation),如果你熟悉python的字典结构和列表结构,其实json格式是非常容易理解的,当然不熟也不难理解,网上的资 ...
- UVa 11292 The Dragon of Loowater 勇者斗恶龙
你的王国里有一条n个头的恶龙,你希望雇佣一些骑士把它杀死(也就是砍掉所有的头).村里有m个骑士可以雇佣,一个能力值为 x 的骑士可以砍掉恶龙一个直径不超过 x 的头,且需要支付 x 个金币.如何雇佣骑 ...
- 四、oracle基本sql语句和函数详解
一.oracle常用数据类型 一. 数据定义语言(ddl) 数据定义语言ddl(data definition language)用于改变数据库结构,包括创建.更改和删除数据库对象. 用于操纵表结构 ...
- delphi实现ado的高级功能
ADO是Microsoft存取通用数据源的标准引擎.ADO通过封装OLE DB而能够存取不同类型的数据,让应用程序能很方便地通过统一的接口处理各种数据库.ADO由一组COM对象组成,每一个不同的原生A ...