题解 | #字符串加解密#
字符串加解密
http://www.nowcoder.com/practice/2aa32b378a024755a3f251e75cbf233a
我真是废物,这道题居然做了一个小时,嚓
主要是来来回回求模运算很绕
其实针对极端情况,直接赋值就好了,不需要管太多
#include <bits/stdc++.h>
using namespace std;
//大小写字母之间数字差32
// A-Z 65~90
// a-z 97~122
// '0'~'9' 48-57
// 加密
void secretString(string s) {
int size = s.size();
//转换为大写
for(int i = 0; i < size; i++) {
// 小写字母变成大写
if(s[i] >= 'a' && s[i] <= 'z') {
if(s[i] == 'z') {
s[i] = 'A';
}
else {
s[i] = (s[i] - 32 + 1) % 65 + 'A';
}
}
// 大写字母变成小写
else if(s[i] >= 'A' && s[i] <= 'Z') {
if(s[i] == 'Z') {
s[i] = 'a';
}
else {
s[i] = (s[i] + 32 + 1) % 97 + 'a';
}
}
// 数字
else if(s[i] >= '0' && s[i] <= '9') {
if(s[i] == '9') {
s[i] = '0';
}
else {
s[i] = (s[i] + 1) % 48 + '0';
}
}
}
for(int i = 0; i < size; i++) {
cout << s[i];
}
cout << endl;
}
// 解密
void unsecretString(string s) {
int size = s.size();
//转换为大写
for(int i = 0; i < size; i++) {
// 小写字母变成大写
if(s[i] >= 'a' && s[i] <= 'z') {
if(s[i] == 'a') {
s[i] = 'Z';
}
else {
s[i] = (s[i] - 32 - 1) % 65 + 'A';
}
}
// 大写字母变成小写
else if(s[i] >= 'A' && s[i] <= 'Z') {
if(s[i] == 'A') {
s[i] = 'z';
}
else {
s[i] = (s[i] + 32 - 1) % 97 + 'a';
}
}
// 数字
else if(s[i] >= '0' && s[i] <= '9') {
if(s[i] == '0') {
s[i] = '9';
}
else {
s[i] = (s[i] - 1) % 48 + '0';
}
}
}
for(int i = 0; i < size; i++) {
cout << s[i];
}
cout << endl;
}
int main()
{
string s1;
string s2;
cin >> s1;
cin >> s2;
secretString(s1);
unsecretString(s2);
return 0;
}