c++写程序:题目描述
亶亶最近在学习计算机密码学,密码学是一门古老而又年轻的学问,计算机科学的兴起给密码学注入了新的活力。在网络、通信技术高度发达的今天,计算机安全和保密问题显得越来越重要。菅董在学习过程中遇到了这样一个任务:解密一份被加密过的文件。经过研究,莹萱发现了加密文件有如下加密规律(括号中是一个“原文->密文”的例子)
(1)原文中所有的字符都在字母表中被循环左移了三个位置(dec ->abz)
(2)逆序存储(abcd -> dcba )
(3)字母大小写反转(abXY ->ABxy)
输入格式
一个加密的字符串。(长度大于1且小于50且只包含大小写字母)
输出格式
输出解密后的字符串。
样例
输入#1
Helloworld
Copy
输出#1
GOURZROOHk
求解!
#include <iostream>
#include <string.h>
using namespace std;
int main(void){
char str[50];
cin>>str;
// cout<<str<<endl;
int len=strlen(str);
// 从第三步开始 解密字符串
// 大小写转换
for(int i=0;i<len;i++){
if(str[i]>='A'&&str[i]<='Z'){
str[i]=str[i]+32;
continue;
}
if(str[i]>='a'&&str[i]<='z'){
str[i] = str[i]-32;
}
}
// cout<<str<<endl;
// 第二步 逆序
for(int i=0;i<len/2;i++){
char ch = str[i];
str[i]=str[len-1-i];
str[len-1-i]=ch;
}
// cout<<str<<endl;
// 第一步 所有字母按字母表顺序右移三位
for(int i=0;i<len;i++){
char ch = str[i];
// http://ascii.wjccx.com/
if((ch>='a'&&ch<'x')||(ch>='A'&&ch<'X')){
ch=ch+3;
str[i]=ch;
continue;
}
if((ch>='x'&&ch<='z')||(ch>='X'&&ch<='Z')){
ch=ch-23;
str[i]=ch;
}
}
// 打印解密后的字符串
cout<<str;
return 0;
}
顺序反过来就行了,先大小翻转,再前后翻转,最后每个字母右移3位(注意XYZxyz对应ABCabc)
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
using namespace std;
int main()
{
string str;
cin >> str;
vector<char>v;
for (int i = 0; i < str.size(); i++)
{
//右移三位
str[i] += 3;
//处理超出部分
if (str[i] > 90 && str[i] < 95)
str[i] -= 26;
if (str[i] > 122 && str[i] < 126)
str[i] -= 26;
//改变大小写
if (str[i] < 91)
str[i] += 32;
else
str[i] -= 32;
//放入容器
v.push_back(str[i]);
}
//反转并存入str
reverse_copy(v.begin(), v.end(), str.begin());
cout << str;
system("pause");
return 0;
}
结果: