WERTY

作者: 净土_0342 | 来源:发表于2018-05-04 08:57 被阅读0次

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


image.png

样例输出:
I AM FINE TODAY.

#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;
}

这里要注意的是,不能用scanf("%c",&c)而是getchar()
scanf()函数返回成功赋值的数据项数,读到文件末尾出错时则返回EOF。
什么鬼
getchar:从stdio流中读字符,相当于getc(stdin),它从标准输入里读取下一个字符。返回类型为int型,返回值为用户输入的ASCⅡ码,出错返回-1。

还有的就是,用字符串往往比较简洁

#include <iostream>
#include <cstring>

using namespace std;

char s[] = "`1234567890-=QWERTYUIOP[]\\ASDFGHJKL;'ZXCVBNM,./";
int main() {
    int c;
    while((c = getchar())!=EOF){
        char *strtem;
        int ok =1;
        if((strtem=strchr(s,c))==NULL) ok =0;
        if(ok)
            cout << *(--strtem);
        else printf("%c",c); // 这里包含了一个强制的转换.
    }
    return 0;
}

常量数组往往会能简化代码,数组无需指明长度,编译器计算.

相关文章

  • WERTY

    例题3-2 WERTYU(WERTYU, UVa10082)把手放在键盘上时,稍不注意就会往右错一位。这样,输入Q...

网友评论

      本文标题:WERTY

      本文链接:https://www.haomeiwen.com/subject/amskrftx.html