加密恢复(1)

大家好!

不定时更新,题目+解析+评测结果+完整程序,有问题有瑕疵欢迎评论区留言!



1.题目

4. K14707 加密恢复
题目描述

对于信息的加密和解密,科科处理的已经非常得心应手了,于是科科想挑战更难一点的问题。

于是找到了这样的一道题目:为了防止信息泄露,一般在重要场合进行信息交流的时候都会对信息进行加密,收到加密信息的人再对信息进行解密。

加密和解密都是重要的一个步骤,大家更多注重的都是加密方式和解密方式。

现在给定了两个用于解密的密钥,密钥的使用方式如下。

第一个解密密钥key1:“yrwhsoujgcxqbativndfezmlpk”;

第二个解密密钥key2:“BCDEFGHIJKLMNOAPQRSXYZTUVW”

解密密钥由26个字母构成,其中key1用于小写字母的解密密钥,key2用于大写字母的解密密钥。

意思是加密信息中的'a'实际上对应的是'y',加密信息中的'b'对应着'r','c'对应着'w',依次类推;

加密信息中的'A'实际上对应的是'B',加密信息中的'B'对应着'C','C'对应着'D',依次类推,如果是空格的话,保持不变。

在详细的了解解密规则后,科科发现大多数人只关注解密规则,确很少有人关注解密前的内容,科科想另辟蹊径找到解密前的内容。

现在给定解密密钥key1和key2,以及解密后的内容,请你帮忙计算出解密前的内容。

输入格式

第一行:输入26个小写字母构成的解密密钥key1

第二行:输入26个大写字母构成的解密密钥key2

第三行:输入解密后的信息,长度不超过255(字符串空可能包含空格以及大小写字母)。

输出格式

输出只有一行,为解密前的加密内容。

输入输出样例
输入样例1:复制
eydbkmiqugjxlvtzpnwohracsf EYDBKMIQUGJXLVTZPNWOHRACSF Jump the fence when you seeing me coming
输出样例1:复制
Kifq oua zarxa suar bti yaagrj fa xtfgrj
说明

如题目所述。

【耗时限制】1000ms 【内存限制】128MB


 2.解析

这道题有点儿棘手。


1.变量
#include<bits/stdc++.h>
using namespace std;
string k1,k2,s;
int main()
{
    return 0;
}

k1:26个小写字母构成的解密密钥。

k2:26个大写字母构成的解密密钥k。

s:解密后的信息。


2.输入 
#include<bits/stdc++.h>
using namespace std;
string k1,k2,s;
int main()
{
    cin>>k1>>k2;
    cin.get();
    getline(cin,s);
    return 0;
}

注意cin.get()。


 3.分情况判断
#include<bits/stdc++.h>
using namespace std;
string k1,k2,s;
int main()
{
    cin>>k1>>k2;
    cin.get();
    getline(cin,s);
	for(int i=0;i<s.size();i++){
		if(islower(s[i])){
			s[i]=k1.find(s[i])+'a';
		}else if(isupper(s[i])){
			s[i]=k2.find(s[i])+'A';
		}
	}
    return 0;
}

 islower:

https://blog.youkuaiyun.com/wucz122140729/article/details/105709843icon-default.png?t=N7T8https://blog.youkuaiyun.com/wucz122140729/article/details/105709843isupper:

https://blog.youkuaiyun.com/wucz122140729/article/details/105710011icon-default.png?t=N7T8https://blog.youkuaiyun.com/wucz122140729/article/details/105710011


4.输出
#include<bits/stdc++.h>
using namespace std;
string k1,k2,s;
int main()
{
    cin>>k1>>k2;
    cin.get();
    getline(cin,s);
	for(int i=0;i<s.size();i++){
		if(islower(s[i])){
			s[i]=k1.find(s[i])+'a';
		}else if(isupper(s[i])){
			s[i]=k2.find(s[i])+'A';
		}
	}
	cout<<s;
    return 0;
}

直接输出。


3.评测结果


4.完整程序

#include<bits/stdc++.h>
using namespace std;
string k1,k2,s;
int main()
{
    cin>>k1>>k2;
    cin.get();
    getline(cin,s);
    for(int i=0;i<s.size();i++){
        if(islower(s[i])){
            s[i]=k1.find(s[i])+'a';
        }else if(isupper(s[i])){
            s[i]=k2.find(s[i])+'A';
        }
    }
    cout<<s;
    return 0;
}



谢谢大家,给个赞呗!💕💕💕

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值