Talk is cheap, show me the code.
一、问题描述
- 对输入的字符串进行加解密,并输出。
- 加密方法为:
当内容是英文字母时则用该英文字母的后一个字母替换,同时字母变换大小写,如字母a时则替换为B;字母Z时则替换为a;
当内容是数字时则把该数字加1,如0替换1,1替换2,9替换0;
其他字符不做变化。 - 解密方法为加密的逆过程。
接口描述:
实现接口,每个接口实现1个基本操作:
void Encrypt (char aucPassword[], char aucResult[]):在该函数中实现字符串加密并输出
说明:
1. 字符串以\0结尾。
2. 字符串最长100个字符。
int unEncrypt (char result[], char password[]):在该函数中实现字符串解密并输出
说明:
1. 字符串以\0结尾。
2. 字符串最长100个字符。
输入描述:
输入一串要加密的密码
输入一串加过密的密码
输出描述:
输出加密后的字符
输出解密后的字符
输入例子:
abcdefg
BCDEFGH
输出例子:
BCDEFGH
abcdefg
二、问题分析
题目比较简单,只是根据不同的字符类型进行转化,有多种处理方式,可以直接用取模的方法来做,也可以采用特殊情况判断的方法来做(当为9、z、Z或者0,a,A的时候特殊处理)。
下面以取模方法为例:
#include <iostream>
#include <string>
using namespace std;
void encrypt(const char aucPassword[], char aucResult[])
{
int i = 0;
for (; aucPassword[i] != '\0'; i++)
{
if (aucPassword[i] >= '0' && aucPassword[i] <= '9')
{
aucResult[i] = '0' + (aucPassword[i] + 1 - '0') % 10;
} else if (aucPassword[i] >= 'A' && aucPassword[i] <= 'Z') {
aucResult[i] = 'a' + (aucPassword[i] + 33 - 'a') % 26;
} else if (aucPassword[i] >= 'a' && aucPassword[i] <= 'z') {
aucResult[i] = 'A' + (aucPassword[i] -31 - 'A') % 26;
} else {
aucResult[i] = aucPassword[i];
}
}
aucResult[i] = '\0';
}
void unEncrypt(const char password[], char result[])
{
int i = 0;
for (; password[i] != '\0'; i++)
{
if (password[i] >= '0' && password[i] <= '9')
{
result[i] = '0' + (password[i] + 10 - 1 - '0') % 10;
} else if (password[i] >= 'A' && password[i] <= 'Z') {
result[i] = 'a' + (password[i] +32 +26 - 1 - 'a') % 26;
} else if (password[i] >= 'a' && password[i] <= 'z') {
result[i] = 'A' + (password[i] - 'a' + 26 - 1) % 26;
} else {
result[i] = password[i];
}
}
result[i] = '\0';
}
int main()
{
string password;
while (cin >> password)
{
char *enc = new char[password.size() + 1];
encrypt(password.c_str(), enc);
for (int i = 0; enc[i] != '\0'; i++)
cout << enc[i];
cout << endl;
string encry;
cin >> encry;
char *unenc = new char[encry.size() + 1];
unEncrypt(encry.c_str(), unenc);
for (int i = 0; unenc[i] != '\0'; i++)
{
cout << unenc[i];
}
cout << endl;
delete [] enc;
}
return 0;
}