题目
描述 | 1、对输入的字符串进行加解密,并输出。 2、加密方法为:当内容是英文字母时则用该英文字母的后一个字母替换,同时字母变换大小写, 如字母a时则替换为B;字母Z时则替换为a; 当内容是数字时则把该数字加1,如0替换1,1替换2,9替换0; 其他字符不做变化。 3、解密方法为加密的逆过程。 |
---|---|
输入 | 输入一串要加密的密码 输入一串加过密的密码 |
输出 | 输出加密后的字符 输出解密后的字符 |
样例输入 | abcdefg BCDEFGH |
样例输出 | BCDEFGH abcdefg |
思路
- 思路一:按照转换关系老老实实的写。。。
- 思路二:建立一个密码表,查表可知加密解密的结果!
代码
#include<iostream>
#include<string>
using namespace std;
void decode(string &str,int length){//解密
for(int i=0;i<length;++i){
if(str[i]>'a'&&str[i]<='z'){
str[i]=(char)(str[i]-31);
}else if(str[i]=='a'){
str[i]='Z';
}else if(str[i]>'A'&&str[i]<='Z'){
str[i]=(char)(str[i]+31);
}else if(str[i]=='A'){
str[i]='z';
}else if(str[i]>'0'&&str[i]<='9'){
str[i]=(char)(str[i]-1);
}else if(str[i]=='0'){
str[i]='9';
}
}
}
void encode(string &str,int length){//加密
for(int i=0;i<length;++i){
if(str[i]>='a'&&str[i]<'z'){
str[i]=(char)(str[i]-31);//33 ‘a’-'A'=32
}else if(str[i]=='z'){
str[i]='A';
}else if(str[i]>='A'&&str[i]<'Z'){
str[i]=(char)(str[i]+31);
}else if(str[i]=='Z'){
str[i]='a';
}else if(str[i]>='0'&&str[i]<'9'){
str[i]=(char)(str[i]+1);
}else if(str[i]=='9'){
str[i]='0';
}
}
}
int main()
{
string temp="";
//1------
cin>>temp;
encode(temp,temp.length());
cout<<temp<<endl;
//2-----
cin>>temp;
decode(temp,temp.length());
cout<<temp<<endl;
return 0;
}