在(00:12)终于改完了bug,我的结果也终于和同学的结果一致了。在此感谢
璟哥
源神。
这个453万的字符串我终于是跑对了。还是代码量太少了,前天璟哥跟我讲了一个小时,从头到尾,我听是听明白了,但是轮到自己写的时候,就开始各种迷茫,乱,先后顺序都很懵。但是学到了一个总体的框架,class类啊,.h文件,类功能的独立,这些倒是学到了。照着他的框架我自己敲了一边代码,璟哥是个很严格的人,不会给我代码,但是允许我去他的电脑上面看他写的代码,不懂可以问。但是他的核心算法我还是知其然,不知其所以然。没办法,我自己开始了自己的想法。
PSP表格
PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|---|
Planning | 计划 | 10 | 20 |
• Estimate | • 估计这个任务需要多少时间 | 10 | 20 |
Development | 开发 | 380 | 640 |
• Analysis | • 需求分析 (包括学习新技术) | 50 | 100 |
• Design Spec | • 生成设计文档 | 10 | 10 |
• Design Review | • 设计复审 | 20 | 20 |
• Coding Standard | • 代码规范 (为目前的开发制定合适的规范) | 10 | 10 |
• Design | • 具体设计 | 20 | 20 |
• Coding | • 具体编码 | 180 | 300 |
• Code Review | • 代码复审 | 60 | 120 |
• Test | • 测试(自我测试,修改代码,提交修改) | 30 | 60 |
Reporting | 报告 | 60 | 90 |
• Test Repor | • 测试报告 | 10 | 10 |
• Size Measurement | • 计算工作量 | 20 | 20 |
• Postmortem & Process Improvement Plan | • 事后总结, 并提出过程改进计划 | 30 | 60 |
合计 | 450 | 750 |
计算模块的接口与实现过程
学习了璟哥的框架,写了一个工具类,里面的函数如下:
static int count(map<string, int> mp)//计算单词总数;
static int GetLines(string s)//计算行数;
static string GetString(ifstream& in)//得到文本的字符串;
static vector<pair<int,string> > getSort(map<string, int> mp)//排序;
static map<string, int> countWord(string s)//得到单词映射表;
计算模块接口部分的性能改进
性能改进我还没时间去考虑,熬了两天夜才把具体代码肝出来,目前只能想到cin,cout改成scanf,printf之类的小优化。
计算模块单元测试部分
未完成。
遇到的问题
我的思路是
1、先逐个字符读进来,存在一个string里面,读的时候进行预处理,把大写的字母全部处理成小写的字母,其他的不变,得到一个字符串。
2、判断是否为单词:
a版本:先找到一个英文字母,然后找到离它最近的下一个非英文字母非数字的符号,然后把这段字符串截出来,先用.length()判断字符串长度是否大于等于4,不是的话,从刚刚找到的非英文字母非数字的符号继续遍历,再找到下一个英文字符。如果长度大于4,就判断他的前四位是不是英文字符,是的话,这就是一个单词。然而a版本有个致命性的错误,123abcd11,类似这种,abcd11就会被我提取出来,并当作单词。于是乎有了b版本。
b版本:先找到一个英文或数字字符,后面的思路不变。这样子跑出来的结果就是和他们俩的结果一样了。因为我的处理是判断前四位是不是英文字母,并设有一个标志位。如果被判定为英文单词,就把单词放进map中。再利用vector,然后sort一下,结果就出来了(我还是偷懒了,哈哈哈哈哈)。还有一个致命的问题,我的行数统计答案应该还是错误的,理解璟哥的想法,然后自己写一遍,9万多行,到我这里就变成12万了。真的是太真实了。
flag
买的Java编程思想已经到了,刚刚到的,可以开始看书,敲书上的代码了,在这里欠下的债,慢慢补回来。