作者 海洋饼干叔叔
单位 重庆大学
(凯撒密码)是一个简单的替换加密技术,它简单地将明文字符串中的全部字母在字母表上偏移n项。当n大于0时,表示向后偏移,小于0则表示向前偏移。当n为2时,字母A变C,c变e,y变a, Z变B;当n为-2时,字母A变Y,c变a,y变w,Z变X。请编写程序,依次读入明文字符串及整数偏移量n,然后输出加密后的密文字符串。提示:C语言可用gets()函数,C++语言可用getline()函数读入整行字符串。
输入样例:
No One Can Stop Us
2
输出样例:
Encrypted message:Pq Qpg Ecp Uvqr Wu
#include<iostream>
#include<string>
using namespace std;
int main() {
char s0[100];
cin.getline(s0, 100);
string s1 = s0;
int n;
cin >> n;
for (size_t i = 0; i < s1.size(); i++) {
if (isalpha(s1[i])) {
if (s1[i] <= 'z'&&s1[i] >= 'a')//区分大小写
{
if (s1[i] + n > 'z')//处理超出字母表特殊情况
s1[i] += (n - 26);
else if (s1[i] + n < 'a')
s1[i] += (n + 26);
else s1[i] += n;//一般情况
}
if (s1[i] <= 'Z'&&s1[i] >= 'A')
{
if (s1[i] + n > 'Z')
s1[i] += (n - 26);
else if (s1[i] + n < 'A')
s1[i] += (n + 26);
else s1[i] += n;
}
}
}
cout << "Encrypted message:" << s1;
}