[GitHub] (https://github.com/Annakristen/031702403)
PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|---|
Planning | 计划 | 30 | 60 |
·Estimate | · 估计这个任务需要多少时间 | 30 | 60 |
Development | 开发 | 2090 | 2770 |
·Planning | 开发 | 30 | 60 |
· Analysis | · 需求分析 (包括学习新技术) | 100 | 120 |
· Design Spec | · 生成设计文档 | 30 | 30 |
· Design Review | · 设计复审 | 30 | 30 |
· Coding Standard | · 代码规范 (为目前的开发制定合适的规范) | 10 | 10 |
· Design | · 具体设计 | 30 | 40 |
· Coding | · 具体编码 | 810 | 1130 |
· Code Review | 代码复审 | 50 | 50 |
· Test | · 测试(自我测试,修改代码,提交修改) | 1000 | 1300 |
Reporting | 报告 | 40 | 50 |
· Test Repor | 测试报告 | 15 | 20 |
· Size Measurement | · 计算工作量 | 15 | 20 |
· Postmortem & Process Improvement Plan | · 事后总结, 并提出过程改进计划 | 10 | 10 |
· 合计 | 2160 | 2880 |
解题思路
最开始看到题目的时候,毫不夸张地说,我的内心是崩溃的。就题目这么长,而且操作的还是文字,而且我又是个只会C++的菜鸟,简直不能更害怕。
后来想了想,再怎么样作业总是要做的,不就是熬夜嘛!然后我就开始用我仅会的C++开始做题了。
最初的想法真的好简单。因为之前听说过可以用API匹配,所以就想先把姓名提出来,在把电话号码提出来,用剩下的文本进行匹配然后输出。
现实是,周围用着python和Java的同学一个个完成了作业,而我还在疯狂百度。而且我意识到我的想法真的太naive了。
所以我对想法进行了改进,想用关键字匹配的方式进行分割,由于实力原因,我选择默认一些缺少关键字的词为两个字(以后一定好好学不会这样了!),然后进行操作,一级一级往下分割。
后来随着我越往下做,我觉得这个思路还是不太行,输入输出也不太行,所以我就开始往C++一些没有接触过的知识上靠,曾经一度还想放弃
最后的最后我把解题地思路定了下来,如下
- 读文件,用函数把中文地格式进行转——string转成
wstring。 - 建立结构体,把wstring进行分割, 然后每一级都存进结构体里。有一些特殊情况的就单独列出了来求解。
- 最后把结构体按格式输出。
实现过程
最后一个版本的代码用到了几个函数分别是:
-string Unicode2UTF8(const wstring& s) (见函数名就能知道功能的一个函数)
-wstring UTF82ToUnicode(const string& s)(又是一个见函数名就能知道功能的函数)
-std::wstring StringToWString(const std::string& str)(最后一个见函数名就能知道功能的函数)
目前写到的结构体addr有8个成员,一个string用来被切割,一个姓名、一个电话、五级地址
异常
这个图看起来好像……很普通?但是其实是我改了第二版代码之后出现的问题——就是输入之后文件都进去了但是并没有结果。我尝试过直接读然后在框里直接输出是可以的,但是就到此为止了没法往下继续,我觉得应该是我的函数出现了问题(但是我不会改)(菜鸟落泪)。
改进
我的改进思路……其实我的改进思路就是一条路走到差不多司死路了然后换一个想法。在默认能识别两个字符的地址分割的基础上添加一些特殊的情况,比如三个字的黑龙江。试图用地址库进行地址匹配,然后失败了,就只能尝试着用特殊案例。至于函数的话,在各个代码网站上不断搜索,然后发现性能更好更加简洁易懂的函数进行改进。
代码说明
这个是在百度查了很久很久很久的三个转换代码。这次的题目对我来说很大的一个挑战就是对中文的处理,特别是一定要用UTF8,还在继续尝试。
实践经验与心路历程
写在前面:我太菜了,我太难了。
这次的作业让我深刻地意识到柯老板地作业不是课成学过的C++可以完成的了,深刻体会到python和Java的好处。一度怀疑柯老板可能是在试图用这种题把我这种菜鸟淘汰掉,不过不得不说压力真的太强大了,一次作业让我接触到了很多之前都没有碰到过的东西,比如文件的读写,json格式,没有用到地正则表达式,还有用的有点不顺手的visual studio 2019(当时下的时候没看版本号),尽管它是C++,还是让我觉得很愉悦。不管是自己百度、翻书,还是听别人说提起的,都觉得自己真的长见识了。
每天都在内在崩溃和自我治愈当中度过,真的很认真很认真地在写代码,现在什么东西写完都想习惯性地按一下F5来结束了。因为太菜了所以和凌晨4点的福大打了招呼之后也没能把这题完整完成,但是这种很认真学一个东西的感觉还是很好的。果然,敷最贵的面膜,熬最长的夜,写从没想过的作业。
不过!还是希望以后老师和助教还有弄测评的同学能够手下留情,题目的难度稍微降一点吧,毕竟这样整天整天做软工作业真的好累,计算机专业的学生每天用软工作业问候对方的日子真的太难了。
然后我上面的作业里头有没有做的题目,真的不是我漏掉了啊!!我的第二版全新代码实在是改不动了没法跑出结果所以才没有截图的,我真的没辙了(对不起是我太菜了……)
还有!还希望代码测评能够稍微……人性一点吧……做一点出来真的挺不容易的(小声叨叨)……