软工第一次个人编程作业

Github仓库

(个人仓库)https://github.com/237085795/031702517.git


PSP表格

PSP2.1 Personal Software Process Stages 预估耗时
(分钟)
实际耗时
(分钟)
Planning 计划 30 24
· Estimate · 估计这个任务需要多少时间 30 24
Development 开发 1510 1730
· Analysis · 需求分析 (包括学习新技术) 600 780
· Design Spec · 生成设计文档 30 20
· Design Review · 设计复审 30 10
· Coding Standard · 代码规范 (为目前的开发制定合适的规范) 10 10
· Design · 具体设计 60 40
· Coding · 具体编码 360 300
· Code Review · 代码复审 60 90
· Test · 测试(自我测试,修改代码,提交修改) 360 480
Reporting 报告 90 90
· Test Repor · 测试报告 30 30
· Size Measurement · 计算工作量 30 30
· Postmortem & Process Improvement Plan · 事后总结, 并提出过程改进计划 30 30
  合计 1630 1844

解题思路

  刚开始拿到题目时我毫无头绪,后来看到大佬使用正则表达式就去学习了一波,关于语言的选择,python和java只学了点皮毛,比较难顶,于是就选择了c++,打了一段时间发现更难顶,难顶也得顶,学习了c++的regex库,复习了一波文件读写然后发现c++好像没有json库,只能手动格式化

设计实现过程

我只设计了一个类Information用来存储和处理数据

Information类

属性 含义
s 保存待处理的字符串
name 姓名
phone 电话
province 第一级
city 第二级
county 第三级
town 第四级
detailedaddress level 1的第五级
da1 level 2的第五级
da2 第六级
da3 第七级
方法 作用
void GetLevel() 从s截取level
void GetName() 从s截取name
void GetPhone() 从s截取phone
void FiveDivision() 对剩余地址串s进行正则处理,将地址进行五级划分
void SevenDivision() 对剩余地址串s进行正则处理,将地址进行七级划分
void Output() json格式化输出
void Solution() 顺序调用以上函数,根据level选择不同的分级处理函数

具体流程

  • 从字符串中提取难度等级,姓名和手机号,去除后缀“.”只留下地址部分
  • 根据等级采用不同的正则表达式对地址分组匹配,采用如下正则表达式进行处理
regex exp("([^省]+自治区|.*?省|.*?行政区)?([^市]+自治州|.*?地区|.*?行政单位|.+盟|市辖区|.*?市|.*?县)?([^县]+县|.+?区|.+市|.+旗|.+海域|.+岛)?([^区]+?区|.+?镇|.+?街道|.+?乡)?(.+?街|.+?路|.+?巷)?([\d]+?号|[\d]+.?道)?(.*)")
  • 类json手动格式化输出

性能分析


从图中看到scrt_common_main_seh()占了最多cpu时间,这个函数用来做一系列的初始化工作


单元测试

1!李四,福建鼓楼13756899511鼓西街道湖滨路110号湖滨大厦一层.
1!张三,福州市闽13599622362侯县上街镇福州大学10#111.
1!刘湖,吉林省白山市六道江镇西村药店18694520738.
1!王五,腾冲市满邑社区华园三小区47号18694520738.
1!咸陡隐,江苏省苏州市吴江13184142847区平望镇新业织造有限公司吴江区平望镇双浜村村民委员会.
2!王五,福建省福州市鼓楼18960221533区五一北路123号福州鼓楼医院.
2!小美,北京市东15822153326城区交道口东大街1号北京市东城区人民法院.
2!王五,云南省昭通市水富18694520738县云川路1号.
2!王五,云南省迪庆藏族自治州18694520738香格里拉市.
2!王五,四川省眉山市仁寿18694520738县黑龙滩镇牌坊街.
2!王五,陕西省渭南市韩18694520738城市108国道附近.
{"姓名":"李四","手机":"13756899511","地址":["","","","福建鼓楼鼓西街道","湖滨路110号湖滨大厦一层"]}
{"姓名":"张三","手机":"13599622362","地址":["","福州市","闽侯县","上街镇","福州大学10#111"]}
{"姓名":"刘湖","手机":"18694520738","地址":["吉林省","白山市","","六道江镇","西村药店"]}
{"姓名":"王五","手机":"18694520738","地址":["","腾冲市","满邑社区","华园三小区","47号"]}
{"姓名":"咸陡隐","手机":"13184142847","地址":["江苏省","苏州市","吴江区","平望镇新业织造有限公司吴江区","平望镇双浜村村民委员会"]}
{"姓名":"王五","手机":"18960221533","地址":["福建省","福州市","鼓楼区","","五一北路","123号","福州鼓楼医院"]}
{"姓名":"小美","手机":"15822153326","地址":["北京","北京市","东城区","","交道口东大街","1号","北京市东城区人民法院"]}
{"姓名":"王五","手机":"18694520738","地址":["云南省","昭通市","水富县","","云川路","1号",""]}
{"姓名":"王五","手机":"18694520738","地址":["云南省","迪庆藏族自治州","香格里拉市","","","",""]}
{"姓名":"王五","手机":"18694520738","地址":["四川省","眉山市","仁寿县","黑龙滩镇","牌坊街","",""]}
{"姓名":"王五","手机":"18694520738","地址":["陕西省","渭南市","韩城市","","","","108国道附近"]}

异常处理

  • 未输入姓名
    • 1!,福建鼓楼13756899511鼓西街道湖滨路110号湖滨大厦一层.
  • 手机长度小于11
    • 1!李四,福建鼓楼13756511鼓西街道湖滨路110号湖滨大厦一层.
  • 未输入难度
    • 李四,福建鼓楼13756899511鼓西街道湖滨路110号湖滨大厦一层.

收获总结

  • 学习地理知识
  • 认识专业名词
  • 正则表达式
  • 文件读写
  • vs的使用
  • vs的github使用
原文地址:https://www.cnblogs.com/ljj237085795/p/11532156.html