individual project1 12061183
1.项目预计用时
之前大二下学期的时候学过面向对象,当时老师叫我们写过一个统计目录下单词的程序,大致的思路是一样的。于是觉得这个程序并不难写。于是就在周末还很轻松地休息着不看程序,知道别的同学提醒才开始看题
下面是我的预计用时:
---遍历文件夹,得到里面的内容,一个小时。
---将字符串按三种要求进行分割,并且存入,统计每个单词出现的次数,并排序,5个小时
---输出到文件。半个小时
2.项目实际用时
仔细看了老师的要求之后,发现完全是老师下的一个迷糊阵,这个和以前的那个程序还是有很大的出入的,字符串的匹配问题比以前困难了许多,而且还涉及到了c#,本来以为可以用java写的。(表示c#c++没一个会的)同时要考虑到程序的性能问题,那就应该在单词存储,统计,频度排序那块下手,要用到dictionary,正则表达式等等,但是这些都是不会的,需要先学。花的时间就像流水一样= =
---遍历文件夹,得到里面的内容,放在一个字符串里,差不多用了一个小时。c#中文件的处理方式和java的不同,花了一些时间在文件的处理上。
---将字符串按三种要求进行分割,并且存入,统计每个单词出现的次数,并排序。加上学习各种语法所用到的时间,肯定不少于15个小时!!!!只能说坑爹的正则表达式。还有可恶的哈希表按关键字排序竟然不行,只能又改写成dictionary
---将字符输出到文件,对命令行参数进行处理,两个小时。
---自己在很多小想法上面走了弯路,浪费了很多时间。
3.项目分析和优化
在考虑项目优化问题方面,在写代码的时候,就想着要从频度排序,单词的检索两个方向去改进。对于单词的检索和频度的统计,我采用了Directory<String,count>存储。其中String是单词的小写模式,count是自己创建的一个类,含有number和word两个变量。number存储了实际要打印出来的字符串,word存储了单词的频度。采用table.OrderByDescending(r => r.Value.getnum()).ThenBy(r => r.Value.getdanci());进行排序,然后就可以根据要求得到输出。不知道是不是电脑原因,跑得竟然那么慢。。。
在相对较合理的时间内完成了较大文件的检索。
下面是有关函数的使用情况:

4.项目的测试用例:
a.测试能否正确分隔单词,以及是否对大小写不敏感


b.测试两个连续单词时,判断能否得到所有连续的两个单词,或是两个空格分隔的字符串是否为连续的两个单词等等


c.测试连续三个单词是否能够正确匹配,判断能否得到所有连续的两个单词,或是两个空格分隔的字符串是否为连续的三个单词等等


d.当有多个文件的时候,看前一个文件的最后一个词会不会和后面一个文件的前面的词构成连续的词


e:检测三个连续单词匹配统计是否正确,以及能否正确处理换行符,是否考虑重叠问题


f:是否支持空文件的检索
很显然,输出文件没有字符串的输出
g:测试汉字的识别情况,是否将汉字当成分隔符


h:连续两个词的统计问题


i:测试三个词的统计和分隔情况


j:统计大文件,由于文件比较大就不贴出来了,但是能够不崩溃就行,就是不知道统计是否正确

5.收获。
想起上一学年被各种科目虐的很惨,但是在学期末的时候,自己都会有点庆幸,能够有这些课鞭策自己去努力的学,充分掌握好自己的时间学到更多的东西。
刚开始写这个程序的时候,自己一点都不了解c#,于是先花了一些时间去熟悉c#,又应题目的要求,去看了一些关于正则表达式和哈希表有关方面的知识,然后开始写自己的代码。刚开始的时候以为排序要用到快排,又去把快排复习了一次。在学习新的知识的同时也巩固了以前学习的知识。很大的收获就是自己学习了正则表达式和哈希表的使用方法,这对程序的性能有很大的提高。
由于不了解c#的类库,自己开始去查相应的API文档,自己以前并没有这样的习惯。这几天发现多阅读API对自己有很大的好处,是个良好的学习习惯,希望自己在以后的编程中也能一直保持这个习惯。
计算机方面要学习的知识还真是多,只能默默说一句自己会努力地。。。
individual project1 12061183的更多相关文章
- last individual reading task 12061183叶露婷
http://www.cnblogs.com/yltyy/p/4025426.html 1.Different people deserve different tasks; Once team ro ...
- individual reading task ---12061183 叶露婷
Different people deserve different tasks; Once team roles are settled, there comes along a lot of ot ...
- Apple individual program 加入之后的玩法 官方资源
Apple individual program 加入之后的玩法 官方资源 0. 开发资源文档 0.1 开发文档: https://developer.apple.com/support/res ...
- Individual Project - Word frequency program-11061171-MaoYu
BUAA Advanced Software Engineering Project: Individual Project - Word frequency program Ryan Mao (毛 ...
- PacBio & BioNano (Assembly and diploid architecture of an individual human genome via single-molecule technologies)
Assembly and diploid architecture of an individual human genome via single-molecule technologies 文章链 ...
- JSU 2013 Summer Individual Ranking Contest - 5
JSU 2013 Summer Individual Ranking Contest - 5 密码:本套题选题权归JSU所有,需要密码请联系(http://blog.csdn.net/yew1eb). ...
- Android问题-XE5提示"[DCC Fatal Error] Project1.dpr(1): F1027 Unit not found: 'System.pas' or binary equivalents (.dcu/.o)"
问题现象:Checking project dependencies...Compiling Project1.dproj (Debug, Android)dcc command line for & ...
- 问题-[致命错误] Project1.dpr(1): Unit not found: 'System.pas' or binary equivalents (DCU,DPU)
问题现象:[致命错误] Project1.dpr(1): Unit not found: 'System.pas' or binary equivalents (DCU,DPU) 问题原因:由于删除D ...
- Socket.io 0.7 – Sending messages to individual clients
Note that this is just for Socket.io version 0.7, and possibly higher if they don’t change the API a ...
随机推荐
- SVN与Git比较的优缺点差异
目录: SVN与Git比较(一)集中式vs分布式 SVN与Git比较(二)版本库与工作区 SVN与Git比较(三)全局版本号和全球版本号 SVN与Git比较(四)部分检出 SVN与Git比较(五)更新 ...
- Git永久删除文件和历史记录
目录 Git永久删除文件和历史记录 使用filter-branch 添加到.gitignore文件里并push修改后的repo 清理和回收空间 Git永久删除文件和历史记录 造成你想从git存储库中永 ...
- trap命令的实战用法
trap命令: trap命令是专用于捕捉信号的.比如像ctrl+c发送给终端的中断信号等等.在捕捉到信号之后,可以进行一系列的操作. 用法:trap 'COMMAND' INT COMMAND表示t ...
- VRS待解决的问题——原因及解决方案
1.持续滤波失败(查看文档) 通过查看文档及代码 2.GAL卫星数为0的网元及原因 3.判断发的是否是单个基站(网元未固定),多个用户进行测试 4.网元固定率(采用文件输出) 5.是否频繁重复初始化 ...
- npm包开发(whale-makelink)
whale-makelink是一个npm工具,是强业务的工具,可以将当前工程目录下的项目文件夹,在README中生成项目的链接地址.Demo. 一.npm init 使用npm init生成packa ...
- MongoDB修改与聚合二
1.修改方法 一 语法 里面有三个大的语句:一个是查询条件:一个是修改字段:一个是其他参数(目前就有两个) db.table.update( 条件, 修改字段, 其他参数 ) update db1.t ...
- cpu的组成及分工
控制单元是上帝:掌控一切: 运算单元只负责算术和逻辑运算,运算的指令由控制单元提供,数据由寄存器提供: 存储单元:一方面给运算单元提供输入输出,另一方面在控制单元的控制下和内存通信: 控制单元使用运算 ...
- Tribonacci UVA - 12470 (简单的斐波拉契数列)(矩阵快速幂)
题意:a1=0;a2=1;a3=2; a(n)=a(n-1)+a(n-2)+a(n-3); 求a(n) 思路:矩阵快速幂 #include<cstdio> #include<cst ...
- 第一行代码 -3-2 软件也要拼脸蛋-UI界面-更强大的滚动条-RecyclerView
简述教程:https://www.jianshu.com/p/4fc6164e4709 一 基础准备 1 添加RecyclerView控件引用库文件 2 总布局添加RecyclerView控件 3 R ...
- css3渐变特性
项目中,一般用于业务办理的进度条,设置背景色,纯背景色可以直接设置,如果是渐变色,那使用line-gradient渐变特性就需要设置渐变的位置了入下图 方法一.直接在进度条轨道上面再加一个元素,用于设 ...