UVa10082 - WERTYU 题解

UVa10082
题目链接:UVa10082 - WERTYU
原题描述

题目大意是把手放在键盘上时,稍不注意就会往右错一位。这样,输入Q就会变成输入W,输入J就会变成输入K等。键盘如图所示。
输入一个错位后敲出的字符串(所有字母均大写),输出打字员本来想要打出的句子。输入保证合法,即一定是错位之后的字符串。例如输入中不会出现大写字母A。
Sample Input

O S, GOMR YPFSU/

Sample Output

I AM FINE TODAY.

这道题的程序主要3个部分构成,输入,计算出正确字符,输出正确字符。好吧,感觉像是说了废话。
输入可以用scanf("%s")来读入字符串,也可以getchar()来一个字符一个字符的读取。输出就和输入保持一致的方法。
最关键的就是如何计算出正确字符?这里我采用了一个常量数组的方式。把键盘的按键从第一行开始,从左到右存到一个数组s里面。这样,如果一个错位后的字符对应在数组里是s[i],那么它正确的字符就是s[i-1]。这种方法超级方便。
Then show the code.

//UVa10082
#include <stdio.h>
#include <string.h>

int main(){
    //常量数组
    char s[] = "`1234567890-=QWERTYUIOP[]\\ASDFGHJKL;'ZXCVBNM,./";
    char c;  
    int len = strlen(s), i;
    //当输入不到结尾,就一直获取字符串
    while(( c = getchar()) != EOF){
        //通过这个循环找到错位的字符对应的s数组的下标i
        for(i = 0; i < len; i++)
            if(s[i] == c)
                break;
        //有可能c不属于s数组 比如空格,那就直接输出
        if(i<len)
            putchar(s[i-1]);
        else
            putchar(c);
    }
    return 0;
}
posted @ 2020-10-24 19:00  1v7w  阅读(241)  评论(0编辑  收藏  举报