• 软工第一次个人编程作业


    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使用
  • 相关阅读:
    BZOJ1040: [ZJOI2008]骑士
    酱油记:GDKOI2018
    BZOJ1800: [Ahoi2009]fly 飞行棋
    BZOJ3894: 文理分科
    树链剖分
    文件格式问题
    10.23模拟赛
    snakes
    数据结构题目
    jquery easyui datebox 的使用 .
  • 原文地址:https://www.cnblogs.com/ljj237085795/p/11532156.html
Copyright © 2020-2023  润新知