假设有九宫格输入法键盘布局如下:
[ 1,.?! ] [ 2ABC ] [ 3DEF ]
[ 4GHI ] [ 5JKL ] [ 6MNO ]
[ 7PQRS ] [ 8TUV ] [ 9WXYZ ]
[ 0空 ]
注意:中括号[ ]
仅为了表示键盘的分隔,不是输入字符。每个中括号中,位于首位的数字字符即是键盘的按键,按一下即可输入该数字字符。多次按同一个键,则输入的字符依次循环轮流,例如按两次3
,则输入D
;按5次7
,则输入S
;按6次2
,则输入A
。按键0
的输入组合是0
和空格
字符,即按两次0
输入空格。
你需要对于给定的按键组合,给出该组合对应的文本。
输入格式:
输入在一行中给出数个字符的按键组合(例如 999
表示按3次9
),每个字符的按键组合之间用空格间隔,最后一个输入法组合之后以换行结束。输入数据至少包括一个字符的按键组合,且输入总长度不超过500个字符。
输出格式:
在一行中输出该按键组合对应的文本。
输入样例:
22 5555 22 666 00 88 888 7777 4444 666 44
输出样例:
ALAN TURING
示例
#include <stdio.h>
#include <string.h>
char g(int num, int c) {
char* arr[] = { "0 ","1,.?!","2ABC","3DEF","4GHI","5JKL","6MNO","7PQRS","8TUV","9WXYZ" };
int len = strlen(arr[num]);// 选中的长度
int s = 0;
for (int i = 0; i < c; i++)
{
if (s >= len) s = 0;
s++;
}
return arr[num][s - 1];
}
int main()
{
char str[512] = "";
gets(str);
char pattern[] = " ";
char* res = strtok(str, pattern);
while (res != NULL)
{//字符分割,然后拿第一个数字 加上 重复次数(分割后的数组长度)
int i = res[0] - 48;
int c = strlen(res);
char t = g(i, c);
printf("%c", t);
res = strtok(NULL, pattern);
}
return 0;
}
标签:字符,输入法,int,res,九宫格,char,按键,输入
From: https://www.cnblogs.com/xxing/p/17316488.html