算法竞赛入门经典5.1.1

题目如下:

方法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);解决输入中有空格的问题,可以一次性读取一整行,最为方便

posted on 2015-07-02 17:02  1163699877  阅读(222)  评论(0编辑  收藏  举报