华为机试HJ29: 字符串加解密
Posted 翟天保Steven
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了华为机试HJ29: 字符串加解密相关的知识,希望对你有一定的参考价值。
题目描述:
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;
string encryption(string password)
{
string result;
int size=password.size();
for(int i=0;i<size;++i)
{
if(password[i]>='A'&&password[i]<='Y')
{
result+=password[i]+33;
}
else if(password[i]=='Z')
{
result+=97;
}
else if(password[i]>='a'&&password[i]<='y')
{
result+=password[i]-31;
}
else if(password[i]=='z')
{
result+=65;
}
else if(password[i]>='0'&&password[i]<='8')
{
result+=password[i]+1;
}
else if(password[i]=='9')
{
result+='0';
}
else{
result+=password[i];
}
}
return result;
}
string decrypt(string password)
{
string result;
int size=password.size();
for(int i=0;i<size;++i)
{
if(password[i]>='B'&&password[i]<='Z')
{
result+=password[i]+31;
}
else if(password[i]=='A')
{
result+='z';
}
else if(password[i]>='b'&&password[i]<='z')
{
result+=password[i]-33;
}
else if(password[i]=='a')
{
result+='Z';
}
else if(password[i]>='1'&&password[i]<='9')
{
result+=password[i]-1;
}
else if(password[i]=='0')
{
result+='9';
}
else{
result+=password[i];
}
}
return result;
}
int main()
{
string p1,p2;
while(cin>>p1>>p2)
{
string r1=encryption(p1);
string r2=decrypt(p2);
cout<<r1<<endl<<r2<<endl;
}
return 0;
}
以上是关于华为机试HJ29: 字符串加解密的主要内容,如果未能解决你的问题,请参考以下文章