[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; }