本题难度不大,分类讨论所有可能的情况即可。需要注意的是,大写字母直接加上33可以实现转小写后再往后移动一位的效果;另外大写字母Z要单独判断,否则转换错误。
#include <iostream>
#include <string>
using namespace std;
int main(){
string s;
getline(cin, s, '\n');
int size = s.size();
for (int i = 0; i < size; i++) {
if (s[i] >= 'a' && s[i] <= 'c') { s[i] = '2'; }
else if (s[i] >= 'd' && s[i] <= 'f') { s[i] = '3'; }
else if (s[i] >= 'g' && s[i] <= 'i') { s[i] = '4'; }
else if (s[i] >= 'j' && s[i] <= 'l') { s[i] = '5'; }
else if (s[i] >= 'm' && s[i] <= 'o') { s[i] = '6'; }
else if (s[i] >= 'p' && s[i] <= 's') { s[i] = '7'; }
else if (s[i] >= 't' && s[i] <= 'v') { s[i] = '8'; }
else if (s[i] >= 'w' && s[i] <= 'z') { s[i] = '9'; }
else if (s[i] >= 'A' && s[i] <= 'Y') { s[i] = s[i] + 33; }
else if (s[i] == 'Z') { s[i] = 'a'; }
else { continue; }
}
cout << s << endl;
return 0;
}