发短信

发短信

发短信

时间限制:1000 ms  |  内存限制:65535 KB
难度:3
描述
下图是手机常用的九键英文输入法界面,如果要输入字母’A’,我们只
需要按一次数字键2,按键顺序记为2;如果要输入字母’B’的话,我们需要连续按两次数字键2,按键顺序记为22;同理:字母’C’需要连续按3次数字键2,按键顺序记为222。通过这种方法,我们用手机10多个键就能输入26个英文字母。
现在你的任务是统计一段英文用手机输入的按键顺序,同样,你也要能把按键顺序翻译成相应的英文内容。
为了使问题简化,我们假设内容只有大写英文字母和空格。

发短信 ACM

输入
有多组测试数据
每组测试数据占一行,有两种情况:
(1)短信内容(只含有若干个空格和大写字母,不超过1000个字符)
(2)短信按键顺序(只含有若干空格和数字,其中第一个肯定是数字,不超过1000个字符)
输出
对于每组测试数据:
如果是短信内容,输出每个字母的按键顺序,每个字母的按键顺序用空格隔开
如果是按键顺序,输出它代表的内容
样例输入
样例输出

校赛普通组决赛:
[cpp]

#include <stdio.h>
#include <string.h>
#include <iostream>
using namespace std;
string num[26]={“2″,”22″,”222″,”3″,”33″,”333″,”4″,”44”,
“444”,”5″,”55″,”555″,”6″,”66″,”666″,”7″,”77″,”777″,
“7777”,”8″,”88″,”888″,”9″,”99″,”999″,”9999″};
string str[26]={“A”,”B”,”C”,”D”,”E”,”F”,”G”,”H”,”I”,”J”,
“K”,”L”,”M”,”N”,”O”,”P”,”Q”,”R”,”S”,”T”,”U”,”V”,”W”,”X”,
“Y”,”Z”};
char str2[26]={‘A’,’B’,’C’,’D’,’E’,’F’,’G’,’H’,’I’,
‘J’,’K’,’L’,’M’,’N’,’O’,’P’,’Q’,’R’,’S’,’T’,’U’,
‘V’,’W’,’X’,’Y’,’Z’};
void numtoa(string s)
{
string news;int i,j;
for(i=0;i<s.size();i++)
{
if(s[i]==’0′) cout<<” “;
else if(s[i]==’ ‘) {
if(news==””) continue;
else {
for(j=0;j<26;j++)
{
if(news==num[j]) cout<<str[j];
}
news=””;
}
}
else news+=s[i];
}
for(j=0;j<26;j++)
{
if(news==num[j]) cout<<str[j];
}
news=””;
cout<<endl;
}
void atonum(string s)
{
int i,j;
for(i=0;i<s.size();i++)
{
if(s[i]==32) cout<<“0″<<” “;
else{
for(j=0;j<26;j++)
{if(s[i]==str2[j]) {cout<<num[j]<<” “;continue;}}
}
}
cout<<endl;
}
int main()
{
string s;//,news;int i,j;
while(getline(cin,s))
{
if(‘0′<=s[0]&&s[0]<=’9’) numtoa(s);
else atonum(s);
}
return 0;
}

[/cpp]