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

原文地址:https://www.cnblogs.com/liujunming/p/4616374.html