题目描述
有一行电文,已按如下规律译成密码:
A-->Z a-->z
B-->Y b-->y
C-->X c-->x
...... ......
即第一个字母变成第26个字母,第i个字母变成第(26-i+1)个字母,非字母字符不变。要求根据密码译回原文,并输出。
思路:根据输入的字符串的字符ascII码判别大写小写字母和数字分别进行相应处理
//解密
#include <iostream>
#include <string>
using namespace std;
int main()
{
char a[26] = {'A','B','C','D','E','F','G','H',
'I','J','K','L','M','N','O',
'P','Q','R','S','T','U','V','W','X','Y','Z'};
char b[26] = {'a','b','c','d','e','f','g','h',
'i','j','k','l','m','n','o',
'p','q','r','s','t','u','v','w','x','y','z'};
int i; //循环变量
string ch;//字符串变量
//输入密文
cin >> ch;
//输入的字符长度
int len = ch.length();
//处理密文
for(i = 0; i < len; i++) // 元素个数循环
{
//不是数字时 57为9最大数字ascII码
if(65 <= ch[i] <= 90) //大写字母
{
for(int j = 0; j < 26;j++) //和26个字母匹配
{
if(ch[i] == a[j]) //每个密码元素判定一次
{
ch[i] = a[26 - j - 1];
break;//跳出当前循环
}
}
}
if(97 <= ch[i] <= 122) //小写字母
{
for(int j = 0; j < 26; j++)
{
if(ch[i] == b[j])
{
ch[i] = b[26 - j - 1];
}
}
}
}
//输出
cout << ch << endl;
return 0;
}
//数字0~9对应48~57, A~Z对应65~90, a~z对应97~122
//if if顺序执行各个if都执行,if else if 满足前边条件就不向下执行了
//小写字母变对应的大写字母加32;