发短信
时间限制:
1000 ms | 内存限制:
65535 KB
难度:
3
-
描述
-
下图是手机常用的九键英文输入法界面,如果要输入字母'A',我们只需要按一次数字键2,按键顺序记为2;如果要输入字母'B'的话,我们需要连续按两次数字键2,按键顺序记为22;同理:字母'C’需要连续按3次数字键2,按键顺序记为222。通过这种方法,我们用手机10多个键就能输入26个英文字母。现在你的任务是统计一段英文用手机输入的按键顺序,同样,你也要能把按键顺序翻译成相应的英文内容。为了使问题简化,我们假设内容只有大写英文字母和空格。
-
输入
-
有多组测试数据
每组测试数据占一行,有两种情况:
(1)短信内容(只含有若干个空格和大写字母,不超过1000个字符)
(2)短信按键顺序(只含有若干空格和数字,其中第一个肯定是数字,不超过1000个字符)
输出
-
对于每组测试数据:
如果是短信内容,输出每个字母的按键顺序,每个字母的按键顺序用空格隔开
如果是按键顺序,输出它代表的内容
样例输入
-
I LOVE YOU HELLO WORLD 444 0 555 666 888 33 0 999 666 88 44 33 555 555 666 0 9 666 777 555 3
样例输出
-
444 0 555 666 888 33 0 999 666 88 44 33 555 555 666 0 9 666 777 555 3 I LOVE YOU HELLO WORLD
来源
- szhhck的水库 上传者
-
ACM_宋志恒
思路:简单模拟 感觉就是在累代码..
#include <stdio.h> #include <string.h> #include <algorithm> using namespace std; char str[1005]; int word[200]; char word1[10000]; char str1[1005][10]; int main() { word[' ']=0; word['A'] = 2; word['B'] = 22; word['C'] = 222; word['D'] = 3; word['E'] = 33; word['F'] = 333; word['G'] = 4; word['H'] = 44; word['I'] = 444; word['J']=5; word['K']=55; word['L']=555; word['M']=6; word['N']=66; word['O']=666; word['P']=7; word['Q']=77; word['R']=777; word['S']=7777; word['T']=8; word['U']=88; word['V']=888; word['W']=9; word['X']=99; word['Y']=999; word['Z']=9999; while(gets(str)) { int len,i; len = strlen(str); bool flag=0; int x=0,j=0; for(int i=0;i<len;i++) { if(str[i]>='0'&&str[i]<='9') { str1[j][x++]=str[i]; flag=1; } else { j++; x=0; } } if(flag) for(int i=0;i<=j;i++) { if(strcmp(str1[i],"0")==0) printf(" "); else if(strcmp(str1[i],"2")==0) printf("A"); else if(strcmp(str1[i],"22")==0) printf("B"); else if(strcmp(str1[i],"222")==0) printf("C"); else if(strcmp(str1[i],"3")==0) printf("D"); else if(strcmp(str1[i],"33")==0) printf("E"); else if(strcmp(str1[i],"333")==0) printf("F"); else if(strcmp(str1[i],"4")==0) printf("G"); else if(strcmp(str1[i],"44")==0) printf("H"); else if(strcmp(str1[i],"444")==0) printf("I"); else if(strcmp(str1[i],"5")==0) printf("J"); else if(strcmp(str1[i],"55")==0) printf("K"); else if(strcmp(str1[i],"555")==0) printf("L"); else if(strcmp(str1[i],"6")==0) printf("M"); else if(strcmp(str1[i],"66")==0) printf("N"); else if(strcmp(str1[i],"666")==0) printf("O"); else if(strcmp(str1[i],"7")==0) printf("P"); else if(strcmp(str1[i],"77")==0) printf("Q"); else if(strcmp(str1[i],"777")==0) printf("R"); else if(strcmp(str1[i],"7777")==0) printf("S"); else if(strcmp(str1[i],"8")==0) printf("T"); else if(strcmp(str1[i],"88")==0) printf("U"); else if(strcmp(str1[i],"888")==0) printf("V"); else if(strcmp(str1[i],"9")==0) printf("W"); else if(strcmp(str1[i],"99")==0) printf("X"); else if(strcmp(str1[i],"999")==0) printf("Y"); else if(strcmp(str1[i],"9999")==0) printf("Z"); } else for(int i=0;i<len;i++) printf("%d ",word[str[i]]); printf("\n"); memset(str1,0,sizeof(str1)); } return 0; }
-
有多组测试数据