我想先统一一下文本都变成小写,方便我去思考,方便偏移(也就少写了个判断)。

C语言实现凯撒加密(全小写)

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main(void){

    char text[8192];  //数组初始化

    printf("输入字符串:"); 

    scanf("%[^\n]%*c",text);   //获取用户输入

    int length=strlen(text); //获取用户输入长度

    //下面是循环;差不多是for循环的另一种表示方式
    int i=0;   
    do{
        if(text[i]<=90&&text[i]>=65) //ASCII大写字母的范围 这步是判断是否是大写字母
        {
            text[i]=text[i]+32; //转化步骤 ASCII编码的大写字母和小写字母相差32 A:65 a:97 A=a+32 
        }
        i++;
    }while(i<length); //循环条件 (i初始是0 小于length)-->循环length次,i范围是[0,lenght-1]






    //小写字母范围[97~122]
    printf("输入偏移:");
    int e;
    scanf("%d",&e);
    e=e%26;
    /*
    位移26又回到自己
    位移27 相当于位移了1
    */
    int j=0;   
      do{
        if(text[j]<=122&&text[j]>=97) //ASCII小写字母的范围 这步是判断是否是小写字母
        {
            
            int addLaterNum=text[j]+e;
            if(addLaterNum>122)
            {
        //找个数自己算然后记下公式
                //越界处理 比如 z偏移1过了122 是123(addLaterNum) 让它变成97 就是addLaterNum-123+97
                addLaterNum-=123;
                addLaterNum+=97;
                text[j]=addLaterNum;
            }else{
                //没有越界直接
                text[j]=addLaterNum;
            }
            
        }
        j++;
    }while(j<length); //循环条件 (i初始是0 小于length)-->循环length次,i范围是[0,lenght-1]

    printf("result:\n%s\n",text);
    return 0;
}