题解 | #字符串加解密#
字符串加解密
http://www.nowcoder.com/practice/2aa32b378a024755a3f251e75cbf233a
一个比较傻瓜式的解法,不建表,直接大小写变换加减1,不知道'9' 后面是啥没关系,直接 if( c == '9'+1) c= '0' 即可
// 思路:ascii 码中字母大小写不相邻,因此可以直接大小写变换后+1
// 对于数字也直接+1
// 9 后为冒号,Z 后为左中括号, z后为左大括号
// 但是密码中也有其他符号,所以要采取最笨的方法
#include <vector>
#include <iostream>
#include <string>
using namespace std;
void func(){
string str;
vector<string> res;
int signal =0;
while(getline(cin,str))
{
if(signal==0){ // 使用signal 标志 解码和编码
for(auto &i:str){
if(isdigit(i)){
i=i+1;
if(i=='9'+1) i='0'; // 不知道9后面是啥可以用 '9'+1来表示
continue;
}
if(isupper(i)){
i=tolower(i);
i=i+1;
if(i=='z'+1) i='a';
continue;
}
if(islower(i)){
i=toupper(i);
i=i+1;
if(i=='Z'+1) i='A';
continue;
}
}
res.push_back(str);
signal=1;
}
else{
for(auto &i:str){
if(isdigit(i)){
i=i-1;
if(i=='0'-1) i='9';
continue;
}
if(isupper(i)){
i=tolower(i);
i=i-1;
if(i==('a'-1)) i='z';
continue;
}
if(islower(i)){
i=toupper(i);
i=i-1;
if(i=='A'-1) i='Z';
continue;
}
}
res.push_back(str);
signal=0;
}
}
for(auto s:res){
cout<<s<<endl;
}
}
int main(){
func();
}