poj1002-487-3279(字符串处理)
2015-11-03 14:58
274 查看
一,题意:
中文题,不解释!
二,思路:
1,处理输入的电话号码
2,排序num[]数组
3,输出
三,步骤:
1,消除 -、Q、Z 三种字符,将一个电话号码转化为一个整数存如num[]数组
如:num[0]=4873279;
2,快排函数:sort(num.num+t) 头文件:#include<algorithm>
3,输出前面3位,后面4位,已经出现的次数(记住使用输出格式设置符的时候加头文件:iomanip)
i,设置3位的宽度set(3)、除以10000之后不足3位的补0(setfill('0'))、
cout << setfill('0') << setw(3) << num[i] / 10000;
cout << '-';
ii,设置4位的宽度set(4)、对10000取余之后不足4位的补0(setfill('0'))、
cout << setfill('0') << setw(4) << num[i] % 10000;
cout << ' ' << count << endl;
四,注意:
1,所有电话号码中,一个重复的都没有才输出"No duplicates.",而且只出现一次的不输出。
2,测试用例中会出现Q和Z,这两个字母要处理
3,字符数组要开大些,,小了结果不正确
4,注意电话号码开头是0的,也照样输出0
View Code
版权声明:本文为博主原创文章,未经博主允许不得转载。
中文题,不解释!
二,思路:
1,处理输入的电话号码
2,排序num[]数组
3,输出
三,步骤:
1,消除 -、Q、Z 三种字符,将一个电话号码转化为一个整数存如num[]数组
如:num[0]=4873279;
2,快排函数:sort(num.num+t) 头文件:#include<algorithm>
3,输出前面3位,后面4位,已经出现的次数(记住使用输出格式设置符的时候加头文件:iomanip)
i,设置3位的宽度set(3)、除以10000之后不足3位的补0(setfill('0'))、
cout << setfill('0') << setw(3) << num[i] / 10000;
cout << '-';
ii,设置4位的宽度set(4)、对10000取余之后不足4位的补0(setfill('0'))、
cout << setfill('0') << setw(4) << num[i] % 10000;
cout << ' ' << count << endl;
四,注意:
1,所有电话号码中,一个重复的都没有才输出"No duplicates.",而且只出现一次的不输出。
2,测试用例中会出现Q和Z,这两个字母要处理
3,字符数组要开大些,,小了结果不正确
4,注意电话号码开头是0的,也照样输出0
#include<iostream> #include<algorithm> #include<cstring> #include<iomanip> //I/O流控制头文件 using namespace std; int ctoi(char ch) //把字符ch转换为其在手机上对应的数字键 { if (ch == 'A' || ch == 'B' || ch == 'C') return 2; if (ch == 'D' || ch == 'E' || ch == 'F') return 3; if (ch == 'G' || ch == 'H' || ch == 'I') return 4; if (ch == 'J' || ch == 'K' || ch == 'L') return 5; if (ch == 'M' || ch == 'N' || ch == 'O') return 6; if (ch == 'P' || ch == 'R' || ch == 'S') return 7; if (ch == 'T' || ch == 'U' || ch == 'V') return 8; if (ch == 'W' || ch == 'X' || ch == 'Y') return 9; } //注意:定义长度比较大的数组,最好定义在主函数外(即堆内存中) char ch[10000000]; //存储一行未处理的电话号码 int num[10000000]; //存储多行已处理的电话号码(如:num[0]=4873279) int main() { int t; while (cin >> t) { for (int i = 0; i < t; i++) { cin >> ch; for (int j = 0, k = 0; j < strlen(ch); j++) { if (ch[j] == '-' || ch[j] == 'Q' || ch[j] == 'Z') continue; else if (ch[j] <= '9') num[i] = num[i] * 10 + ch[j] - '0'; else if (ch[j] <= 'Z') num[i] = num[i] * 10 + ctoi(ch[j]); } } sort(num, num + t); //快排函数sort头文件 bool flag = false; int count = 1; for (int i = 0; i < t; i++) { if (num[i] == num[i + 1]) { count++; flag = true; } else { if (count > 1) { cout << setfill('0') << setw(3) << num[i] / 10000; cout << '-'; cout << setfill('0') << setw(4) << num[i] % 10000; cout << ' ' << count << endl; } count = 1; } } if (!flag) { cout << "No duplicates." << endl; } } return 0; }
View Code
版权声明:本文为博主原创文章,未经博主允许不得转载。
相关文章推荐
- 用beyond compare解决git不能同步项目重新下载项目然后就行对比解决冲突
- 牛顿插值法
- XMPP框架 微信项目开发之CoreData学习——CoreData的查询方式(模糊查询,嵌套查询,分页查询)
- Tutorial One
- JAVA中执行顺序
- Dubbo入门例子HelloWorld
- C# 四舍五入
- ECMall2.x模板制作入门系列之2(模板标签/语法)
- android ContentProvider
- XJOI 迷你火车头
- Lambda表达式详解
- android异常
- supervisor进程监控
- mysql创建只读账号
- Linux下安装PHP
- [MySQL FAQ]系列 — 从MyISAM转到InnoDB需要注意什
- Android仿网易新闻导航栏PagerSlidingTabStrip
- MFC 程序入口和执行流程
- Java编码问题汇总(转)
- 靠谱的爱代驾司机