拉丁字母表有26个字符,而电话只有数字输入板。为了便于输入字母,我们做了一个对应关系。 例如,要输入B,程序要输入22.为了输入相同键上的不同字母,用户在输入之间要停顿一下。 空格' '用来指代停顿。例如2 2代表AA,22代表B 输入 第一行代表测试案例的数目N 下面N行,每行是一个字符串 输出 对于每个测试案例,输出“Case #x: ",然后输出按键顺序 样例输入 4 hi yes foo bar hello world 样例输出 Case #1: 44 444 Case #2: 999337777 Case #3: 333666 6660 022 2777 Case #4: 4433555 555666096667775553的C语言代码
时间: 2024-03-19 18:42:25 浏览: 57
以下是代码实现:
```c
#include <stdio.h>
#include <string.h>
// 数字键盘对应的字母
char letters[10][5] = {" ", "", "abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz"};
int main() {
int n;
scanf("%d", &n);
// 处理每个测试案例
for (int i = 1; i <= n; i++) {
char str[105];
scanf("%s", str);
printf("Case #%d: ", i);
int len = strlen(str);
// 处理每个字符
for (int j = 0; j < len; j++) {
char ch = str[j];
// 找到该字符对应的数字键
for (int k = 0; k < 10; k++) {
if (strchr(letters[k], ch) != NULL) {
// 输出该数字键
for (int m = 0; m <= j; m++) {
if (strchr(letters[k], str[m]) != NULL) {
printf("%d", k);
}
}
printf(" ");
break;
}
}
}
printf("\n");
}
return 0;
}
```
代码思路:
对于每个测试案例,我们先读入一个字符串,然后处理每个字符。对于每个字符,我们要找到它对应的数字键,然后输出该数字键。具体实现方法是,遍历每个数字键,对于每个数字键,判断该字符是否在该数字键对应的字母中出现过,如果出现过,就输出该数字键。输出数字键时,要将该数字键输出j+1次,因为前面的字符可能也对应该数字键。输出完所有数字键后,要在数字键之间加上空格。
注:本题解仅供参考,可能存在一些不够严谨或不够高效的地方,仅供大家学习交流。
阅读全文