一、Github项目地址
https://github.com/linxiaotang031702542/031702542
二、PSP表格
PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|---|
Planning | 计划 | 30 | 20 |
Estimate | 估计这个任务需要多少时间 | 30 | 20 |
Development | 开发 | 635 | 860 |
Analysis | 需求分析 (包括学习新技术) | 100 | 120 |
Design Spec | 生成设计文档 | 10 | 5 |
Design Review | 设计复审 | 5 | 5 |
Coding Standard | 代码规范 (为目前的开发制定合适的规范) | 10 | 30 |
Design | 具体设计 | 60 | 70 |
Coding | 具体编码 | 300 | 500 |
Code Review | 代码复审 | 60 | 40 |
Test | 测试(自我测试,修改代码,提交修改) | 90 | 90 |
Reporting | 报告 | 50 | 95 |
Test Repor | 测试报告 | 20 | 30 |
Size Measurement | 计算工作量 | 10 | 15 |
Postmortem & Process Improvement Plan | 事后总结, 并提出过程改进计划 | 20 | 50 |
合计 | 715 | 975 |
三、解题思路
先将姓名提取出来,再从剩下的中找出连着的11个数字,这样其余的就都是地址;先根据关键字“省”,“市”,“区/县”,“街道/镇/乡”找出前面四级,地址然后根据首字符判断要划分成五级地址还是七级地址,如果是七级的话再根据关键字划分就行了。
四、设计实现过程
在代码中我就只是用了for循环之间的嵌套,并没有用到类,函数的话也都是从数据库中调用的,下面是比较关键的代码。
这是提取省份:
for (i = 0; i < (s.length() - 6); i = i + 2)
{
if (s.substr(i, 2) == "省")
{
outfile << s.substr(0, i + 2);
i += 2;
break;
}
else if (s.substr(i, 6) == "自治区")
{
outfile << s.substr(0, i + 6);
i += 2;
break;
}
}
if (i > (s.length() - 6))
{
if (s.substr(0, 4) == "北京" || s.substr(0, 4) == "上海" || s.substr(0, 4) == "重庆" || s.substr(0, 4) == "天津")
{
outfile << s.substr(0, 4);
i = 0;
}
if (s.substr(0, 6) == "黑龙江")
{
outfile << "黑龙江省";
i = 6;
}
else
{
outfile << s.substr(0, 4) << "省";
i = 4;
}
}
outfile << '"' << ',' ;
outfile << '"';
这是提取市:
for (j = i; j < (s.length() - 2); j = j + 2)
{
if (s.substr(j, 2) == "市")
{
outfile << s.substr(i, j - i + 2);
j += 2;
break;
}
}
if (j > (s.length() - 2))
{
outfile << s.substr(i, 4)<<"市";
j = m + 4;
}
outfile << '"' << ',';
outfile << '"';
这是提取县:
for (i = j; i < (s.length() - 2); i = i + 2)
{
if (s.substr(i, 2) == "区" || s.substr(i, 2) == "县")
{
outfile << s.substr(j, i - j + 2);
i += 2;
break;
}
}
outfile << '"' << ',';
outfile << '"';
if (i > (s.length() - 2))
{
i = m;
}
之后的地址也跟上面一样操作。
测试样例:
文件输入:
文件输出:
异常
只从输出上举例:
1.有些市级无法输出;
2.有些七级地址无法划分开来;
3.会出现乱码的情况。
性能分析图