第一次个人编程作业

ぐ巨炮叔叔 提交于 2020-04-01 08:44:49

github

PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟)
· Planning · 计划  30 35 
· Estimate · 估计这个任务需要多少时间  5 5
· Development · 开发  25 30 
· Analysis · 需求分析 (包括学习新技术) 25  30 
· Design Spec · 生成设计文档 40  30 
· Design Review · 设计复审 45  30 
· Coding Standard · 代码规范 (为目前的开发制定合适的规范) 50  30 
· Design · 具体设计 30  50
· Coding · 具体编码 150  180 
· Code Review · 代码复审 45  30 
· Test · 测试(自我测试,修改代码,提交修改) 30  60 
· Reporting Standard
· 报告
15   40
· Test Repor
· 测试报告
35   50
· Size Measurement · 计算工作量 15  10 

· Postmortem & Process

Improvement Plan

· 事后总结, 并提出过程改进计划 25  30 
 
· 合计
565   640

 

 

解题思路

  先根据“,”的位置把姓名分离出来,然后把电话号码分割开。对于地址,前三级地址会预先读入到一个字典树里。设字典树的根节点深度为0,所有省级地名的所属的节点深度均为1,市级节点深度均为2,县级节点深度均为3。每个节点的子节点为属于该节点的下属地址,比如福州市所代表的节点为福建省节点的子节点。对于每个节点内存储了所在子树的所有名称和编码信息。分离前三级地址时,起始节点为根节点,会枚举地址字符串的每一个前缀,若前缀在当前节点的存储的信息中存在,则说明当前前缀是合法的,是一个有效的地址,然后会根据前缀代表的地址,更新当前节点的位置。并判断当前级别的地址的上一级地址是否为空,若为空,则通过字典树中的信息补全,然后删除该前缀。并重复执行上述步骤,若前三级地址已经分离完成,或找不到合法前缀,则跳出。用剩下的字符串分离剩下的四级地址。

  对于四到六级地址,会根据各级地址结束符(例如:街道,路)分离出当前级别内容,最后未被分离的地址及为第七级地址。

性能分析

  空间复杂度O(N),时间复杂度为O(NlogN)。(vs的分析图,我也不知道这是啥)

  

异常处理

  约等于没有。

已知bug

  暂不透露。

测试情况

  程序会先读入data.txt里面的信息,然后读取ask.txt里面的询问,并把结果输出到ans.txt。(备注无论是不是询问3都会自动补全能补全的地址信息,懒得去判断是否需要补全)

  评分的人可以修改ask.in里的讯问,然后运行程序,再用人眼识别ans.txt的输出是不是大概符合要求。不是很清楚评测的程序是怎么写的,要是按照OJ的评测标准,那多输出一个空格都可能是错的。

  仓库textA的文件可以直接用devc++编译,textB要用vs2017。

  输入文件:

2!李四,福建省福州13756899511市鼓楼区鼓西街道湖滨路110号湖滨大厦一层.
2!张三,福州闽13599622362侯县上街镇福州大学10#111.
2!王五,福建省福州市鼓楼18960221533区五一北路123号福州鼓楼医院.
2!小美,北京市东15822153326城区交道口东大街1号北京市东城区人民法院.
2!小陈,广东省东莞市凤岗13965231525镇凤平路13号.

  输出文件:

{"姓名":"李四","手机":"13756899511","地址":["福建省","福州市","鼓楼区","鼓西街","道湖滨路","110号","湖滨大厦一层"]}
{"姓名":"张三","手机":"13599622362","地址":["福建省","福州市","闽侯县","上街镇","","","福州大学10#111"]}
{"姓名":"王五","手机":"18960221533","地址":["福建省","福州市","鼓楼区","","五一北路","123号","福州鼓楼医院"]}
{"姓名":"小美","手机":"15822153326","地址":["北京","北京市","东城区","","交道口东大街","1号","北京市东城区人民法院"]}
{"姓名":"小陈","手机":"13965231525","地址":["广东省","东莞市","","凤岗镇","凤平路","13号",""]}

 

小结

    c++面向对象的功能已经差不多全部还给老师了。所以基本没有面向对象的内容,字典树也是用结构体实现的。正则表达式不会,敲了四百行代码暴力判断一些可能出现的情况。

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!