【敲错键盘】
打字员把手放在键盘时,不小心就会往右错一位。这样的话,Q就会变成W, 会变成K, 当然空格是不会有错的啦。
输入一个错位后敲出的字符串,输出打字员本来想打出来的句子。
样例输入:O S, GOMR YPFSU/
样例输出:I AM FINE TODAY.
分析: 如果是字母 P,实际应该是 O; 如果是字母H,实际应该是 G; 如果是空格,则还是空格。
本题比较好的办法是使用常量数组,如果输入是 s[i],则输出 s[i-1],非常简洁。
1 2 3 4 5 6 7 8 9 | 敲错键盘 Tex括号 周期串 小学生算术 精确的计算阶乘 6174问题 *字母重排 *Cantor的数表 *因子和阶乘 |
第7行:找到 c 在字符串 s 中的位置, for 循环后面直接就是分号,表明循环体是个空语句。
1 2 3 4 5 6 7 8 9 10 11 12 | #include <stdio.h> char *s = "`1234567890-=QWERTYUIOP[]\\ASDFGHJKL;'ZXCVBNM,./"; int main() { int i, c; while ((c = getchar()) != EOF) { for (i=1; s[i] && s[i]!=c; i++) ; if (s[i]) putchar(s[i-1]); else putchar(c); } return 0; } |
这道题如果使用指针和库函数 strchr,代码会变得更为简洁。
8 9 | if (不是字符串 s 的末尾,表明 c 出现在字符串中) 输出更正后的字符 else 直接输出 |
strchr(s, c) : 在 s 指向的字符串中查找 c,若找到,则返回指向它第一次出现的位置的指针,否则返回 NULL