[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;
} 
京公网安备 11010502036488号