题目:
模拟老式手机输入,九宫格布局如下:
[ 1 ] [ 2ABC ] [ 3DEF ]
[ 4GHI ] [ 5JKL ] [ 6MNO ]
[ 7PQRS ] [ 8TUV ] [ 9WXYZ ]
[ 0空 ]
题目输入为数字或者’-’,其中‘-’代表手机输入时等待的时间间隔,数字表示点击某个按键的次数。比如点击两次2,则输出为B,四次2,则输出为A。
例:
输入:255
输出:AK
输入(等待间隔‘-’可以无限长,也可以没有):
2222------55
输出:AK
#include<bits/stdc++.h>
using namespace std;
string str; //对于不知道长度的字符串,最好定义为string类型
int main()
{
cin>>str;
char mp[20][4]={{},{'1'},{'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'},{'0'}};
//可以开大一点
int i=0;
while(i<str.length())
{
if(str[i]=='-'){
i++;
continue;
}
if(str[i]=='1'){
cout<<'1';
i++;
continue;//直接执行下一个
}
int cnt=0,j=i;
while(str[j]==str[j+1] && str[j] >= '0' && str[j] <= '9')
{
cnt++;
j++;
}
if(str[i]=='7'||str[i]=='9')//四个字母的键盘
cout<<mp[str[i]-'0'][cnt % 4];
else //三个字母的键盘
cout<<mp[str[i]-'0'][cnt % 3];
i+=(cnt+1);
}
return 0;
}