1 条题解
-
0
题意分析
- 键盘布局:标准的 键盘,每个键的左侧键是固定的。
- 错误类型:用户打字时手的位置整体右移一位,因此实际按下的键是目标键的右侧键。
- 解码规则:将输入中的每个字符替换为其左侧的键:
- 例如 的左侧键是 , 的左侧键是 , 的左侧键是 。
- 特殊处理:
- 空格保持不变。
- 某些键(如 、、 和反引号
`
)不会出现在输入中。
解题思路
- 建立映射表:
- 使用一个字符串表示 键盘的每一行:
- 第一行:
- 第二行:
- 第三行:
- 第四行:
- 对于每个字符(除了空格),找到它在键盘中的位置,并替换为其左侧的字符。
- 使用一个字符串表示 键盘的每一行:
- 处理输入:
- 逐字符读取输入,如果是空格则直接输出。
- 否则,查找该字符在键盘中的位置,并输出其左侧字符。
- 边界情况:
- 第一列的字符(如 、、、)没有左侧键,但题目保证输入不会包含这些字符。
C++ 代码实现
#include <stdio.h> #include <string.h> #include <iostream> using namespace std; char str[1100]; char g[1100] = "1234567890-=QWERTYUIOP[]\\ASDFGHJKL;'ZXCVBNM,./"; // 修复转义字符 int main() { while (fgets(str, sizeof(str), stdin) != NULL) // 替换不安全的gets { int len = strlen(str); if (len > 0 && str[len-1] == '\n') // 移除fgets可能读取的换行符 str[--len] = '\0'; for (int i = 0; i < len; i++) { char tmp = str[i]; if (tmp == ' ') // 空格直接输出 { putchar(' '); continue; } char* p = strchr(g, tmp); // 使用更高效的查找 if (p == NULL) putchar(tmp); else putchar(*(p-1)); } putchar('\n'); } return 0; }
- 1
信息
- ID
- 1539
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 2
- 已通过
- 1
- 上传者