第一次个人编程作业

github

PSP

PSP2.1Personal Software
Process Stages
预估耗时(min)实际耗时(min)
Planning 计划 20 30
Estimate 估计这个任务需要多少时间 20 30
Development 开发 1710 2310
Analysis 需求分析
(包括学习新技术)
900 1200
Design Spec 生成设计文档 0 0
Design Review 设计复审 30 20
Coding Standard

代码规范
(为开发制定合适的规范)

40 60
Design 具体设计 60 100
Coding 具体编码 500 640
Code Review 代码复审 60 110
Test 测试
(自我测试,修改,提交修改)
120 180
Reporting 报告 75 75
Test Report 测试报告 20 30
Size Measurement 计算工作量 15 15
Postmortem & Process
Improvement Plan

事后总结
并提出过程改进计划

40 45
  合计 1805 2415

计算模块接口的设计与实现过程。

       这次代码的核心是正则表达式。刚开始json文件看的一脸懵,完全没接触过的知识,慢慢的学会它的函数,c++又要让我吐槽的是还得自己配置json的头文件....那过程实在是太曲折了....前期先是了解正则表达式的规则,每一个字符正则代表的意思你都看得懂,但是组合在一起就是妖魔鬼怪!! 而且痛苦的是网上的正则教程十有八九都是java的版本,c++能用的函数实在是太少了。地址要做的第一步处理就是把手机提取出来,下一步开始匹配难度类型,再把名字根据‘,’分割出来,剩下的就是最主要处理的地址了。c++不能一次完成整个字符串的match,所以我采用分开抓出来。先把省份提取出来,如果没有匹配到,则进入省的数组进行匹配,比较特别的是要先提取出直辖市进行对比。接下来再进行市、区等的匹配,与匹配省的过程类似。而c++的中文字符串不能匹配,实在是很坑。这时我去网上参考了一个中文匹配子串的函数。代码如下:

vector<int> stringToVecInt(const string &str)
{
    union {
        char c[2];
        int  i;
    } convert;
    // 段位清零
    convert.i = 0;
    vector<int> vec;
    for (unsigned i = 0; i < str.length(); i++) {
        // GBK编码首字符大于0x80
        if ((unsigned)str[i] > 0x80) {
            // 利用union进行转化,注意是大端序
            convert.c[1] = str[i];
            convert.c[0] = str[i + 1];
            vec.push_back(convert.i);
            i++;
        }
        else
            // 小于0x80,为ASCII编码,一个字节
            vec.push_back(str[i]);
    }
    return vec;
}

bool include(const string &str, const string &msg)
{
    auto sour = stringToVecInt(str);
    auto find = stringToVecInt(msg);
    return search(sour.begin(), sour.end(), find.begin(), find.end()) != sour.end();
}

        最痛苦的是,程序写完了上传GitHub的时候把自己的工程sln弄没了...然后自己重新编译原码的时候出现了看不懂的错误...最后挣扎的用python写了代码。思路和c++的是类似的。但唯一感动的就是再也不用烦恼输入输出为UTF-8格式了,也不用烦恼中文在字符串里面的操作了。最后一句python真香....

计算模块接口部分的性能改进/部分单元测试展示

        百度完一脸懵逼,被代码折磨得脑袋不行的我选择放弃了....

posted @ 2019-09-17 16:57  Gallium-697  阅读(158)  评论(3编辑  收藏  举报