题解 | 字符串加解密
字符串加解密
https://www.nowcoder.com/practice/2aa32b378a024755a3f251e75cbf233a
#include <cctype> #include <iostream> #include <iterator> #include <ostream> #include <string> using namespace std; /* 前情提要: 题目是字符串的加解密,题目描述也是一样的. 可能是中等难度的题目吧,题目描述里多多少少有些坑的.虽然复杂,但是多搞些测试样例把问题复现就能解决 对于加密,有两个规则: 1.对于密码中的字母,按照字母表的顺序,向后移动一位,同时改变大小写, 1.1.Z转换为a,因此遇到Z直接改成a就行. 2.对于密码中的数字,递增1,如果是9则是0. */ // 加密接口 void Encript(string& pwd) { for (char& ch : pwd) { if (isalpha(ch)) { // 0.特殊情况,遇到大写的Z,换成a if (ch == 'Z') ch = 'a'; else if (ch == 'z') ch = 'A'; else { // 1.后移一位 ch++; // 2.改变大小写 if (islower(ch)) ch = toupper(ch); else ch = tolower(ch); } } else if (isdigit(ch)) { // 检测到数字 if (ch == '9') ch = '0'; else ch++; } } } /* 对于解密, 1.对于密码中的字母,按照字母表的顺序,先改变大小写,再向前移动一位 2.对于密码中的数字,递减1,如果是0则是9 */ void Decript(string& pwd) { for (char& ch : pwd) { if (isalpha(ch)) { // 0.特殊情况,遇到小写的a,换成Z if (ch == 'a') ch = 'Z'; else if (ch == 'A') ch = 'z'; else { // 1.改变大小写 if (islower(ch)) ch = toupper(ch); else ch = tolower(ch); // 2.后移一位 ch--; } } else if (isdigit(ch)) { // 检测到数字 if (ch == '0') ch = '9'; else ch--; } } } int main() { string s; // 明文 cin >> s; Encript(s); // 加密接口 cout << s << endl; // 输出密文 string t; // 密文 cin >> t; Decript(t); cout << t << endl; // 输出明文 }