题目描述
在信息传递过程中,为了防止信息被截获,往往需要采用一定的方式加密。我们给出一种最简单的加密方法,对给定的一个字母字符串,其中字母 A ~ Z,a ~ z 的字母用其后继字母替代,把 z 和 Z 用 a 和 A 替代,其他非字母字符则保持不变。请根据此加密规则将输入的密码进行解密。
输入格式: 一行,加密后的字符串,长度不超过 10000 个字符。
输出格式: 一行,将密码解密后的字符串。
输入输出示例:
输入:Ifmmp! Ipx! bsf zpvs!
输出:Hello! How! are you!
解题思路
本题的核心在于理解加密与解密的逆向关系。加密规则是将字母向后移动一位(A→B, z→a),因此解密规则则是将字母向前移动一位(B→A, a→z)。对于非字母字符,保持不变。
具体逻辑如下:
- 遍历字符串中的每个字符。
- 判断字符是否为小写字母:
- 如果是 'a',解密为 'z'。
- 如果是 'b' 到 'z',解密为前一个字符。
- 判断字符是否为大写字母:
- 如果是 'A',解密为 'Z'。
- 如果是 'B' 到 'Z',解密为前一个字符。
- 其他字符直接保留。
代码实现
#include <iostream>
#include <string>
using namespace std;
int main() {
string s;
getline(cin, s); // 输入加密后的字符串
for (int i = 0; i < s.size(); i++) {
if (s[i] >= 'a' && s[i] <= 'z') {
if (s[i] == 'a') {
s[i] = 'z';
} else {
s[i]--;
}
} else (s[i] >= && s[i] <= ) {
(s[i] == ) {
s[i] = ;
} {
s[i]--;
}
}
}
cout << s << endl;
;
}


