c语言 九宫格输入法

c语言 九宫格输入法

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

[ 1,.?! ] [ 2ABC ] [ 3DEF ]
[ 4GHI ] [ 5JKL ] [ 6MNO ]
[ 7PQRS ] [ 8TUV ] [ 9WXYZ ]
[ 0空 ]
请用程序实现: 对于给定的按键组合,给出该组合对应的文本。

注意: 中括号[]仅为了表示键盘的分隔,不是输入字符。每个中括号中,位于首位的数字字符即是键盘的按键,按一下即可输入该数字字符。多次按同一个键,则输入的字符依次循环轮流,例如按两次 3,则输入 D;按 5 次 7,则输入 S;按 6 次 2,则输入 A。按键 0 的输入组合是 0 和空格字符,即按两次 0 输入空格。

示例
输入
22 5555 22 666 00 88 888 7777 4444 666 44
输出
ALAN TURING`
下面是代码

#include<stdio.h>
int main()
{   
    char note[100];
    int i=0int k=0;
    char c[10][6] = {{'1',',','.','?','!'},{'2','A','B','C'},{'3','D','E','F'},{'4','G','H','I'},{'5','J','K','L'},{'6','M','N','O'},{'7','P','Q','R','S'},{'8','T','U','V'},{'9','W','X','Y','Z'},{'0',' '}};
    gets(note);
    while(note[i]!='\0')
    {  
        if(note[i]==' ')
        {
		   i=i+1;
		}
		  else
		  {
		    while(note[i]==note[i+1])
		      {  k=k+1;
		         i=i+1;
		       }
           switch(k)
          {
            case 0:printf("%c",c[note[i]-'0'-1][0]);
				  break;
            case 1:printf("%c",c[note[i]-'0'-1][1]);
				  break;
            case 2:printf("%c",c[note[i]-'0'-1][2]);
				  break;
            case 3:printf("%c",c[note[i]-'0'-1][3]);
				  break;
            case 4:printf("%c",c[note[i]-'0'-1][4]);
				  break;
		 }
		i++;
  k=0;    
  }
   }
     return 0;
}

这样写出来的
如果要求是输入1234567

输出也是1234567

### C语言实现九宫格输入法 在C语言中实现九宫格输入法涉及模拟按键行为并映射到相应的字符。根据给定的键盘布局[^1],可以创建一个函数来处理这种转换。 #### 键盘布局定义 首先,定义一个二维数组用于存储每个键对应的字符序列: ```c char keymap[10][5] = { "", /* 0 */ ".?! ", /* 1 */ "ABC", /* 2 */ "DEF", /* 3 */ "GHI", /* 4 */ "JKL", /* 5 */ "MNO", /* 6 */ "PQRS", /* 7 */ "TUV", /* 8 */ "WXYZ" /* 9 */ }; ``` 此结构允许通过索引访问特定键上的字符列表。 #### 输入解析逻辑 对于每一个输入的数字串,计算其长度以决定最终应返回哪个字符。考虑到连续按下同一按钮会循环选择不同的字母,在实际编码时需特别注意这一点。当遇到'0'时特殊处理为空格或保持原样输出零[^2]。 下面是一个简单的例子展示如何依据上述规则编写程序片段: ```c #include <stdio.h> #include <string.h> void translate(char *input, char *output); int main() { char input[] = "444"; // Example Input char output[100]; translate(input, output); printf("%s\n", output); return 0; } // Function to convert T9 inputs into corresponding characters. void translate(char *input, char *output){ int i=0,j,k,len=strlen(input),count=1; static const char* keymap[][5]={ "", /* 0 */ ".?!", /* 1 */ "ABC", /* 2 */ "DEF", /* 3 */ "GHI", /* 4 */ "JKL", /* 5 */ "MNO", /* 6 */ "PQRS", /* 7 */ "TUV", /* 8 */ "WXYZ" /* 9 */ }; while(i<len && count<=strlen(keymap[input[i]-'0'])){ j=input[i++]-'0'; if(j==0){ strcat(output," "); continue; } k=(count++)%strlen(keymap[j]); strncat(output,&keymap[j][(k)?(k-1):strlen(keymap[j])-1],1); } } ``` 这段代码实现了基本的功能需求,能够接收一串代表按键次数的字符串作为参数,并将其翻译成预期的文字输出。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

gustmirage

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值