求一个解题思路,给代码也行(我裂开了)

任务描述
著名的密码学者Ron Rivest解释道:“密码学是关于如何在敌人存在的环境中通讯”,密码学是信息安全等相关议题,如认证、访问控制的核心。密码学已被应用在日常生活:包括 自动柜员机的芯片卡、电脑使用者存取密码、 电子商务等等。
在通信过程中,待加密的信息称为明文,已被加密的信息称为密文,仅有收、发双方知道的信息称为密钥。在密钥控制下,由明文变到密文的过程叫加密,其逆过程叫脱密或解密。
由于古时多数人并不识字,最早的秘密书写的形式只用到纸笔或等同物品,随着识字率提高,就开始需要真正的密码学了。最古典的两个加密技巧是:
(1)置换(Transposition cipher):将字母顺序重新排列,例如‘help me’变成‘ehpl em’。
(2)替代(substitution cipher):有系统地将一组字母换成其他字母或符号,例如‘fly at once’变成‘gmz bu podf’(每个字母用下一个字母取代,密钥为1)。

本关任务:
本任务采用替代密码,对一段电文进行加密:
将电文中的大(小)写字母变为其后的第n(如n=3时)个字母,并将最后n个字母,如n=3时的X、Y、Z变为A、B、C。
例如,密钥n=1时:
输入明文:fly at once
经加密后的密文为:gmz bu podf

例如,密钥n=3时:
输入明文:fly at once
经加密后的密文为:iob dw rqfh

例如,密钥n=25时:
输入明文:Fly at once
经加密后的密文为:Ekx zs nmbd

供参考:

#include<stdio.h>
int main()
{
    char a[256];
    int  i=0,n=1;
    printf("Input key:");
    scanf("%d",&n);
    getchar();
    gets(a);
    while(a[i]!='\0')
    {
         if(a[i]>='A'&&a[i]<='Z')
            a[i] = (a[i]-'A'+ n)%26+'A';
         else if(a[i]>='a'&&a[i]<='z')
            a[i] = (a[i]-'a'+ n)%26+'a';
         i++;
    }
    a[i]='\0';
    printf("%s\n",a);
    
    return 0;
}

提供思路:
1、从ASCII码入手,对于大小写对于的ASCII码范围不一样,例如小写(1-9),大写(11-13)
2、提供获取每个字符的加密字符的公共方法,公共方法内判断将字符的ASCII码(char强制为int型即可)+3再转为字符(int型强制为char即可),对于想接近后三个字符,其实就是判断7-9,11-13而已