描述
在美国,商家都喜欢用好记的电话号码。人们常用的方法就是把电话号码拼成一个便于记忆的词汇或者短语,比如你可以通过Gino比萨店的电话号码301-GINO来定比萨。另一个方法就是把电话号码分为成组的数字,比如你可以通过必胜客的电话“三个十”:3-10-10-10来定比萨。
一个七位电话号码的标准形式是xxx-xxxx,如 123-4567。
通常,电话上的数字与字母的映射关系如下
A, B, C 映射到 2
D, E, F 映射到 3
G, H, I 映射到 4
J, K, L映射到5
M, N, O映射到6
P, R, S映射到7
T, U, V映射到8
W, X, Y映射到9
Q和Z并没有相关的映射。
你的任务就是把一个七位电话号码转为标准的xxx-xxxx格式,其中x表示数字
关于输入
第一行为输入的电话号码个数n(n<100), 下面n行每行表示一个七位号码,这些号数为了便于记忆可能不是标准格式,但一定是合法的。
关于输出
对于行输入,输出一个标准格式的电话号码
例子输入
12
4873279
ITS-EASY
888-4567
3-10-10-10
888-GLOP
TUT-GLOP
967-11-11
310-GINO
F101010
888-1200
-4-8-7-3-2-7-9-
487-3279
例子输出
487-3279
487-3279
888-4567
310-1010
888-4567
888-4567
967-1111
310-4466
310-1010
888-1200
487-3279
487-3279
源码实现
#include <iostream>
#include <string>
using namespace std;
int Mapping(char& c) {
switch (c)
{
case 'A':
case 'B':
case 'C':
return 2;
case 'D':
case 'E':
case 'F':
return 3;
case 'G':
case 'H':
case 'I':
return 4;
case 'J':
case 'K':
case 'L':
return 5;
case 'M':
case 'N':
case 'O':
return 6;
case 'P':
case 'R':
case 'S':
return 7;
case 'T':
case 'U':
case 'V':
return 8;
case 'W':
case 'X':
case 'Y':
return 9;
default:
break;
}
}
int main()
{
int n;
cin >> n;
string s;
for (int i = 0; i < n; i++) {
cin >> s;
int len = s.size();
int count = 0;
int m;
bool a = false;
for (int i = 0; i < len; i++) {
m = Mapping(s[i]);
if (m >= 0 && m <= 9){
cout << m;
count++;
}
if (s[i] >= '0' && s[i] <= '9') {
cout << s[i];
count++;
}
if ((count == 3)&&(!a)) {
cout << "-";
a=true;
}
}
cout << endl;
}
return 0;
}