题解 | #字符串加解密#

字符串加解密

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();
}

全部评论

相关推荐

点赞 评论 收藏
分享
重生2012之我是java程序员:换个稍微正式点的照片吧
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务