算法竞赛入门经典:第五章 基础题目选解 5.1WERTYU

来源:互联网 发布:美工的岗位工资待遇 编辑:程序博客网 时间:2024/05/24 06:06
/*把手放在键盘上时,稍不注意就会往右错移一位。这样的话,Q会变成W,J会变成K等。电脑键盘如下图所示:`  1234567890-=BackSPTabQWERTYIOP[]\A  SDFGHJKL;'EnterZ  XCVBNM,./Control Alt      Alt Control输入一个错位后敲出的字符串,输出打字员本来想打出的句子。输入:O S,GOMR YPSFU输出:I AM FINE TODAY.思路:设置一个int 数组映射char iArr[(int)'W'] = 'Q';char iArr[(int)'1'] = '`';这个太烦,将两个字符串放在一起,采用一前一后对称方式:还原的字符串:`1234567890-QWERTYUIOP[]ASDFGHJKL;ZXCVBNM,. 敲错的字符串:1234567890-=WERTYUIOP[]\SDFGHJKL;'XCVBNM,./*//*关键:1 在输入 O S,GOMR YPSFU时,因为空格,scanf会当成多个字符串,这里可以采用gets来做,gets默认不会以空格来切分字符串2 此题除了设置两个一一对应数组外,还可以采用前移一位来打印字符串。while((ch = getchar()) != EOF)  putchar(priStr[i-1]);3 注意,转移字符'\'需要用 '\\'表示*/#include <stdio.h>#include <stdlib.h>#include <string.h>#define MAXSIZE 1024char* findCorStr(char* str,char* rStr){char priStr[MAXSIZE] = " 1234567890-=WERTYUIOP[]SDFGHJKL;'XCVBNM,./\\";char resStr[MAXSIZE] = " `1234567890-QWERTYUIOP[ASDFGHJKL;ZXCVBNM,.]";int iLen = strlen(priStr);int iStrLen = strlen(str);int i,j;for(i = 0 ; str[i] != '\0'; i++)//for(i = 0 ; i < iStrLen ; i++){for(j = 0; j <= iLen ; j++){if(str[i] == priStr[j]){rStr[i] = resStr[j];break;}}}rStr[i] = '\0';return rStr;}void priStr(char* str){char priStr[MAXSIZE] = "`1234567890-=QWERTYUIOP[]\\ASDFGHJKL;'ZXCVBNM,./";char ch;while((ch = getchar()) != EOF){for(int j = 0 ; str[j] != '\0' ;j++){for(int i = 1 ; priStr[i] != '\0' ; i++){if(str[j] == priStr[i]){putchar(priStr[i-1]);break;}}}}}int main(int argc,char* argv[]){char rStr[MAXSIZE];char str[MAXSIZE];gets(str);printf("%s\n",findCorStr(str,rStr));/*while(EOF != scanf("%s",str));//关键:若输入空格,则会当成若干个字符串进行切割{char rStr[MAXSIZE];printf("%s\n",findCorStr(str,rStr));}*/system("pause");return 0;}

0 0
原创粉丝点击