7-33 九宫格输入法(15 分)

假设有九宫格输入法键盘布局如下:

 [ 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>
char result(int a,char s){
	int array[10][5]=
	{
		{49,44,46,63,33},//1
		{50,65,66,67},//2
		{51,68,69,70},//3
		{52,71,72,73},//4
		{53,74,75,76},//5
		{54,77,78,79},//6
		{55,80,81,82,83},//7
		{56,84,85,86},//8
		{57,87,88,89,90},//9
		{48,32}//0
	};
	if(s=='1'||s=='7'||s=='9'){
		while(a>5) a-=5;
		printf("%c",array[s-'0'-1][a-1]);
	}else if(s=='0'){
		while(a>2) a-=2;
		printf("%c",array[9][a-1]);
	}else{
		while(a>4) a-=4;
		printf("%c",array[s-'0'-1][a-1]);
	}
}
int main(void){
	char c[500];
	int i,j;
	//输入字符串 
	for(i=0;;i++){
		scanf("%c",&c[i]);
		if(c[i]=='\n') break;
	}
	//计算并输出
	for(i=0;c[i]!='\n';i++){
		int show=1;
		for(;c[i]==c[i+1];i++){
			show++;
		}
		result(show,c[i]);
		if(c[i+1]==' ') i++;
		
	}
}

    原文作者:九宫格问题
    原文地址: https://blog.csdn.net/archer9812/article/details/78828926
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞