好难!!电文问题升级,大写A→小写z,小写a→大写Z

有一行电文,已按下面规律译成密码:A→z B→y a→Z b→Y
第一个字母变成第26个字母,第i个字母变成第(26-i+1)个字母,非字母字母不变。要求编程序将密码译成原文,并输出密码和原文


#include <stdio.h>
int main()
{
    char cl[26], sl[26], p[20];
    int i, j, k;
    for (i=0, j='A', k='a'; i<26; cl[i]=j++, sl[i]=k++, i++);
    printf("Please enter password: ");
    gets(p);
    printf("Password: ");
    puts(p);
    for (i=0; i<20; i++)
        for (j=0; j<26; j++){
            if (p[i]==cl[j]){
                p[i]=cl[25-j]; break;
            }
            if (p[i]==sl[j]){
                p[i]=sl[25-j]; break;
            }
        }
    printf("Original: ");
    puts(p);
    return 0;
}

img

#include <stdio.h>
#include <string.h>
void f(char t[])
{
    int len=strlen(t),j;
    for(j=0;j<len;j++)
    {
        if(t[j]>='A'&&t[j]<='Z')
        {
            t[j]=t[j]+57-(t[j]-'A')*2;
        }
        else if(t[j]>='a'&&t[j]<='z')
        {
            t[j]=t[j]-7-(t[j]-'a')*2;
        }
    }
}
int main()
{
    char t[250];
    printf("请输入字符串:\n");
    gets(t);
    f(t);
    puts(t);
    return 0;
}

转换公式都已经给出了,你只需要遍历字符串数组,然后判断一下当前字符是否是字母,如果是字母,就代入转换公式计算,否则不变就可以了。