现在的位置: 首页 > 竞赛 > 正文

【竞赛入门】第5章 基础题目选解

2011年05月07日 竞赛 ⁄ 共 2667字 ⁄ 字号 暂无评论

【敲错键盘】

打字员把手放在键盘时,不小心就会往右错一位。这样的话,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

抱歉!评论已关闭.