紫书第三章例题--UVa10086

时间:2023-02-27 08:58:06

题目:UVa10082

 

地址:https://vjudge.net/problem/UVA-10082

 

题解:

题意很简单,就是由于在键盘上打字,手容易向右错位,所以要你写一个程序,把错位的字符串归位。

 

思路:

    思路也很简单,就是对于所有合法的字符(题目输入时已经保证),输出其左边的那个字符。实现方法有二:一、使用常量字符数组一次性读入所有字符,然后对于每一个输入的字符,在字符数组找出它的位置,输出其左边的那个字符,如果找不到的话,就原样输出。二、建立输入与输出的映照关系的数组(类似于map容器),不过这种方法比较麻烦些。

 

编程技巧:

①  可以用常量字符数组读入多个字符,无需逗号分隔,也不需要指明数组大小,编译器可以完成计算。

e.g: char ch[] ="`1234567890-=QWERTYUIOP[]\ASDFGHJKL;'ZXCVBNM,./";

 

AC代码:

题目:UVa10082

地址:https://vjudge.net/problem/UVA-10082

题解:
题意很简单,就是由于在键盘上打字,手容易向右错位,所以要你写一个程序,把错位的字符串归位。

思路:
	思路也很简单,就是对于所有合法的字符(题目输入时已经保证),输出其左边的那个字符。实现方法有二:一、使用常量字符数组一次性读入所有字符,然后对于每一个输入的字符,在字符数组找出它的位置,输出其左边的那个字符,如果找不到的话,就原样输出。二、建立输入与输出的映照关系的数组(类似于map容器),不过这种方法比较麻烦些。

编程技巧:
①	可以用常量字符数组读入多个字符,无需逗号分隔,也不需要指明数组大小,编译器可以完成计算。
e.g: char ch[] = "`1234567890-=QWERTYUIOP[]\ASDFGHJKL;'ZXCVBNM,./";

AC代码:
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstdlib>
#include<string>
#include<cstring>
#include<vector>
#include<stack>
using namespace std;

char ch[] = "`1234567890-=QWERTYUIOP[]\ASDFGHJKL;'ZXCVBNM,./";      ///用常量字符数组一次性全部读入键盘上所有的字符

int main(){
    int len = strlen(ch);
    char c;
    while((c=getchar())!=EOF){                                  ///读入字符
        int flag = 0;
        for(int i = 0;i < len;++i){             ///在字符数组中查找此次输入的字符
            if(ch[i]==c){                       ///找的话,就输出其左边的那个字符  
                flag = 1;
                printf("%c",ch[i-1]);           
                break;
            }
        }
        if(!flag)   printf("%c",c);             ///找不到的话,就原样输出
    }
    return 0;
}