[C++] 简单密码

首先,输入没有空格,所以直接cin。
其次,这道题是要替换小写字母为指定数字,并把大写转小写。对于小写转数字,直接采用一个unordered_map来存放映射关系,如果是小写字母则直接替换;对于大写字母,则有个小技巧,任意字母与空格字符进行按位或运算能变为小写,当然你也可以直接➕32来获得。

#include<iostream>
#include<unordered_map>
using namespace std;

unordered_map<char, char> m{{'a', '2'}, {'b', '2'}, {'c', '2'},
                           {'d', '3'}, {'e', '3'}, {'f', '3'},
                           {'g', '4'}, {'h', '4'}, {'i', '4'},
                           {'j', '5'}, {'k', '5'}, {'l', '5'},
                           {'m', '6'}, {'n', '6'}, {'o', '6'},
                           {'p', '7'}, {'q', '7'}, {'r', '7'}, {'s', '7'},
                           {'t', '8'}, {'u', '8'}, {'v', '8'},
                           {'w', '9'}, {'x', '9'}, {'y', '9'}, {'z', '9'}
};
int main()
{
    string s;
    while(cin >> s){
        for (char & i : s){
            if (m.count(i)){
                //存在小写字母
                i = m[i];
            }
            else if (i >= 'A' && i <= 'Z'){
                if(i != 'Z'){
                    i = (i | ' ') + 1;
                }
                else{
                    i = 'a';
                }
            }
        }
    }
    cout << s<<endl;
    return 0;
}