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;
}
不忘初心方得始终