题目如下:
方法1:
#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; }
方法2
#include<stdio.h> #include <string.h> char *s="`1234567890-=QWERTYUIOP[]\ASDFGHJKL;'ZXCVBNM,./"; char buf[500]; int getIndexOfS(char c){ int i; for(i=1;s[i]!=c&&s[i];i++); if(s[i]) return i; return -1; } void dealString(int n){ int i,index; for(i=0;i<n-1;i++){ index=getIndexOfS(buf[i]); if(index!=-1) putchar(s[index-1]); else putchar(buf[i]); } } int main(){ int n; while(1){ fgets(buf,sizeof(buf),stdin); n=strlen(buf); dealString(n); } return 0; }
收获:
1.利用字符指针初始化字符数组比直接用字符定义方便
例如:初始化字符串"wer"时, char st[]={'w','e','r'};但是利用char *st="wer";显得更加高效
2.转义字符的使用,若想表示这个字符则必须用'\'才能表示出来
3.fgets(buf,sizeof(buf),stdin);解决输入中有空格的问题,可以一次性读取一整行,最为方便