#include <iostream>
using namespace std;
int a[] = {2,2,2,3,3,3,4,4,4,5,5,5,6,6,6,7,7,7,7,8,8,8,9,9,9,9};
int main() {
    string s;
    cin>>s;
    int len = s.length();
    for(int i = 0;i<len;i++){
        if(s[i]>='a'&&s[i]<='z'){
            cout<<a[s[i]-'a'];
        }
        else if (s[i]>='A'&&s[i]<='Z') {
            if(s[i]=='Z'){
                cout<<'a';
            }
            else{
                cout<<(char)(s[i]+33);
            }
        }
        else{
            cout<<s[i];
        }
    }
    return 0;
}
// 64 位输出请用 printf("%lld")

使用数组存储对应字母和相应数字之间的关系,然后遍历输出字符中字母的对应的字符即可。

活动地址https://www.nowcoder.com/discuss/726480854079250432