#include <stdio.h>
//使用ASCII码
int main() {
    int mid, i = 0;
    char ch, str[100];
    while (scanf("%c", &ch) != EOF &&
            ch != '\n') { 
        //str[i]=ch;//最终转换字符全部存储在str中

        mid = (int)ch;

        if (mid > 47 && mid < 58) //字符为0-9的数字
            str[i] = ch; //数字不变

        else if (mid > 64 && mid < 91) //字符为大写数字{
            if (mid == 90) //Z
                str[i] = 'a';
            else {
                mid += 33; //转换为小写+32(ASCII码),再后移一位
                str[i] = (char)mid;
            }

        else if (mid > 96 && mid < 123) //小写字母
            if(mid>114){//从s开始不一样
                if(mid==115)
                   str[i]=(char)55;//7的ASCII码
                else if(mid>115&&mid<119)
                   str[i]=(char)56;//8
                else
                   str[i]=(char)57;//9

            }
            else{
                mid = (mid - 97) / 3 + 50;
                str[i] = (char)mid;
            }
                
    else
         str[i] = ch;

        printf("%c", str[i]);
        i++;
        ch = '\n';
   }
    return 0;
}

根据ASCII码,

数字0-9(ASCII码48-57)不变;

大写字母(65-90)先转换为小写字母(97-122),即ASCII码加上32,再后移一位(除了z(单独赋值)都是加1)

小写字母(97-122),a-o(97-111)都是3个字母对应一个数:(ASCII码-97)/3 得到整除的值然后加2即可对应;剩余字母分别考虑