“恺撒密码”据传是古罗马恺撒大帝用来保护重要军情的加密系统。它是一种替代密码,明文中的所有字母都在字母表上向后(或向前)按照一个固定数目进行偏移后被替换成密文。如将字母按顺序推后3位,则将字母A换作字母D,将字母B换作字母E。据说恺撒是率先使用加密函的古代将领之一,因此这种加密方法被称为恺撒密码。
编写加密函数和解密函数,验证加密和解密结果。
输入格式:
第一行输入明文
第二行输入密文
第三行输入向右移位的位数
输出格式:
第一行输出对输入的明文加密后的密文
第二行输出对输入的密文解密后的明文
输入样例:
Thank you
Jrypbzr gb PHM
13
输出样例:
Gunax lbh
Welcome to CUZ
#include<iostream>
using namespace std;
int main()
{
string a, b;
int n;
getline(cin, a, '\n');
getline(cin, b, '\n');
cin >> n;
for (int i= 0;i <a.size();i++)
{
if(a[i]>='a'&&a[i]<='z')
a[i]=(a[i]-'a'+n)%26+'a';
else if(a[i]>='A'&&a[i]<='Z')
a[i]=(a[i]-'A'+n)%26+'A';
}
for (int j=0;j<b.size();j++)
{
if (b[j] >= 'a' && b[j]<='z')
b[j]=(b[j]-'a'-n+ 26)%26+'a';
else if(b[j]>='A' && b[j]<='Z')
b[j]=(b[j]-'A'-n+26)%26+'A';
}
cout <<a<<endl;
cout <<b<<endl;
return 0;
}
这里输入的时候要注意就是有空行就用getline 。加密和解密实际是一个相反的过程,加密就是在原来的基础上加上n,解密就是在原来的字符串上减上n。加密过程中我们我们首先进行-'a'这样可以计算出是第几个字母,再加上后移的再对26个字母求余可以计算出是第几个字母。我举个例子,当我们是第5个字母的时候加上26 得到31,再对取余可以得到5说明就是第5个字母。再加上a的码就行,解密同样的过程