算法竞赛入门例题3.2

来源:互联网 发布:360数据恢复软件比较差 编辑:程序博客网 时间:2024/06/07 17:11

题目 错位字符串

把手放在键盘上时,稍不注意就会往右错一位。这样的话,Q会变成W,J会变成K等,输入一个错位后敲出的字符串,输出打字员本来想打出的句子。

样例输入:O S, GOMR YPFSU

样例输出:I AM FINE TODAY

emmm,之前自己的思路是最简单粗暴,也是最麻烦的那一种,就是把输入进去的字符跟要输出的字符一一对应起来。。。

然而,对比了一下书上的解法,觉得书上的思路应该好好借鉴。

如果要简化解法,那么首先面临的问题是,输入一串字符之后,如何找到对应的正确的字符?

对于这个问题,我一开始的想法是建立两个字符串,把输入的所有字符存进一个字符串当中,而在另外一个字符串当中找到对应的字符,然后输出前一个,但就是怎么把输入的字符串当中的字符读取出来跟另一个字符串进行比较。。这个语句我不知道怎么写(然后就去用那个最简单粗暴的解法了。。。。)

实际上,为什么要建立第一个字符串组,给自己找麻烦呢?(没错,我就是没事儿找事,太闲了),仔细想一下就知道,在这样的问题当中,把第一个字符串专门存储起来是没有什么意义的,完全可以一边输入一边进行比较以及输出。如果是这样的话,那上面的问题就不存在了。

这也是书上的思路。

另外,值得借鉴的写法就是,for语句,直接写完了在后面写上分号,(因为只要找到与c相等的s[i]就好,不需要输出,直接往下进行判断即可,以后类似的情况也可以这样来写)

代码如下:

#include<stdio.h>
#include<string.h>
char s[]="`1234567890-=QWERTYUIOP[]\ASDFGHJKL;'ZXCVBNM,./";
int main()
{
    int c,i;
    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;

}



原创粉丝点击