题意:    

        1、对输入的字符串进行加解密,并输出。

        2、加密方法为:

                当内容是英文字母时则用该英文字母的后一个字母替换,同时字母变换大小写,如字母a时则替换为B;字母Z时则替换为a;

                当内容是数字时则把该数字加1,如0替换1,1替换2,9替换0;

                其他字符不做变化。

        3、解密方法为加密的逆过程。


方法一:
直接模拟

思路:
        直接模拟。
        加密:
                如果是数字,则右移加一;
                如果是小写字母,则变为大写字母,并右移加一;
                如果是大写字母,则变为小写字母,并右移加一。

        解密:
                如果是数字,则左移减一;
                如果是小写字母,则变为大写字母,并左移减一;
                如果是大写字母,则变为小写字母,并左移减一。

            

#include <bits/stdc++.h>

using namespace std;

int main(){
    string s1,s2;
    while(cin >> s1 >> s2){//输入
        int len1=s1.size();
        for(int i=0;i<len1;i++){//遍历
            if(isdigit(s1[i])){//如果是数字,则右移加一
                s1[i]=s1[i]+1;
                if(s1[i]>'9')
                    s1[i]='0';
            }else{
                if(s1[i]>='a'&&s1[i]<='z'){//如果是小写字母,则变为大写字母,并右移加一
                    s1[i]-=32;
                    s1[i]=s1[i]+1;
                    if(s1[i]>'Z')
                        s1[i]='A';
                }else{//如果是大写字母,则变为小写字母,并右移加一
                    s1[i]+=32;
                    s1[i]=s1[i]+1;
                    if(s1[i]>'z')
                        s1[i]='a';
                }
            }
        }
        cout << s1 << endl;
        int len2=s2.size();
        for(int i=0;i<len2;i++){
            if(isdigit(s2[i])){//如果是数字,则左移减一
                s2[i]=s2[i]-1;
                if(s2[i]<'0')
                    s2[i]='9';
            }else{
                if(s2[i]>='a'&&s2[i]<='z'){//如果是小写字母,则变为大写字母,并左移减一
                    s2[i]-=32;
                    s2[i]=s2[i]-1;
                    if(s2[i]<'A')
                        s2[i]='Z';
                }else{//如果是大写字母,则变为小写字母,并左移减一
                    s2[i]+=32;
                    s2[i]=s2[i]-1;
                    if(s2[i]<'a')
                        s2[i]='z';
                }
            }
        }
        cout << s2 << endl;
    }
    
    return 0;
}



时间复杂度:
空间复杂度:


方法二:
map

思路:
       定义两个映射map,分别实现加密和解密过程。
        如图所示:
        

#include <bits/stdc++.h>

using namespace std;
string x1="0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
string x2="1234567890BCDEFGHIJKLMNOPQRSTUVWXYZAbcdefghijklmnopqrstuvwxyza";
unordered_map<char,char> m1;//x1映射到x2
unordered_map<char,char> m2;//x2映射到x1

int main(){
    string s1,s2;
    for(int i=0;i<62;i++){//映射初始化
        m1[x1[i]]=x2[i];
        m2[x2[i]]=x1[i];
    }
    while(cin >> s1 >> s2){//输入
        int len1=s1.size();
        for(int i=0;i<len1;i++){//加密
            s1[i]=m1[s1[i]];
        }
        cout << s1 << endl;
        int len2=s2.size();
        for(int i=0;i<len2;i++){//解密
            s2[i]=m2[s2[i]];
        }
        cout << s2 << endl;
    }
    
    return 0;
}

时间复杂度:
空间复杂度: