算法竞赛入门经典:第五章 基础题目选解 5.1WERTYU
2015-08-11 11:03
183 查看
/* 把手放在键盘上时,稍不注意就会往右错移一位。这样的话,Q会变成W, J会变成K等。电脑键盘如下图所示: ` 1234567890-=BackSP TabQWERTYIOP[]\ A SDFGHJKL;'Enter Z 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 1024 char* 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; }
相关文章推荐
- 22-IO流-28-IO流(流的操作基本规律-需求体现-1)
- 22-IO流-29-IO流(流的操作基本规律-需求体现-2)
- socket示例代码演示程序(螺纹)
- mysql主从配置浅析
- 敏捷中的防火墙
- 【COCI 2012】踢足球
- 4.7 专业相框设计——ImageView的堆栈应用
- 回溯法求集合的幂集
- iOS蓝牙开发入门04--服务和特征
- iOS 9 分屏多任务(3):画中画(PiP)快速入门
- 对象和类的的关系
- [EventBus源码解析] 初探EventBus
- Ubuntu 14.10 下安装Ambari 问题汇总
- SVG实战开发学习(七)——文字与声音
- hdu2594 KMP
- 安装Windows 10商店应用而不切换至微软账户的两种方法
- Ubuntu 64 + IntelliJ IDEA + Genymotion 搭建Android开发环境
- svn简易操作
- hdoj畅通工程
- 在线画时序图的工具:Web Sequence Diagrams ,支持实时生成预览图