洛谷 U5737 纸条

题目背景

明明和牛牛是一对要好的朋友,他们经常上课也想讲话,但是他们的班级是全校纪律最好的班级,所以他们只能通过传纸条的方法来沟通。但是他们并不能保证每次传纸条老师都无法看见,所以他们对纸条进行了加密。

题目描述

明明和牛牛的纸条一共分为两行,第一行有26个小写字母,代表着每个字符的加密字符——第一个字母代表着a(A)的加密字符,第二个字母代表着b(B)的加密字符...(大写字母的加密字符是相同的大写字母)。第二行就是加密过的话,需要根据第一行破译出它的内容。如果加密有误,就输出“Error”。(一个)

加密有误指第一行的26字母有重复(有字母没有出现)

输入输出格式

输入格式:

 

两行,第一行是26个字母,意思如题。第二行是一段加密过的话

 

输出格式:

 

如题:破译出的话

 

输入输出样例

输入样例#1:
bcdefghijklmnopqrstuvwxyza
J ibwf b ofx qfodjm.
输出样例#1:
I have a new pencil.
输入样例#2:
bcdefghijklmnopqrstuvwxyja
J ibwf b ofx qfodjm.
输出样例#2:
Error

说明

加密过的话长度在255位以内

输入中包括',','.','?'三种标点

  • 输入规模

40%的数据满足:输出没有Error

100%数据满足:只有两个Error

思路:水题。

错因:输入方式错误。

#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<iostream>
#include<algorithm>
using namespace std;
int num[27];
string s,a,p;
char ans[27]={'0','a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'};
int main(){
    getline(cin,s);
    for(int i=0;i<26;i++){
        int k=s[i]-'a'+1;
        if(num[k]){
            cout<<"Error";
            return 0;
        }
        num[k]=i+1;
    }
    getline(cin,p);
    for(int i=0;i<=p.length();++i) {
        int flag=0,b;
        if(p[i]>='A'&&p[i]<='Z'){
            flag=1;
            p[i]+=32;
        }
        if(p[i]>='a'&&p[i]<='z'){
            b=num[p[i]-'a'+1];
            p[i]=ans[b];
            if(flag) p[i]-=32;
        }
    }
    cout<<p;
    return 0;
}

 

 

 

posted @ 2017-09-03 19:33  一蓑烟雨任生平  阅读(278)  评论(0编辑  收藏  举报