向各位求解字符串加密问题,拜托

向各位求解字符串加密问题,拜托

问题描述:

输入一串字符(长度不超过100)和一个正整数 k ,将其中的英文字母加密并输出加密后的字符串,非英文字母不变。加密思想:将每个字母 c 加一个序数 k ,即用它后面的第 k 个字母代替,变换公式: C = C + k 。如果字母为 Z ,则后一个字母是 a ,也就是字母字符形成一个圆。
(注意输入第一行是一个整数k,第二行是若干字符)

#include<stdio.h>
#include<string.h>
int main()
{
    int i,k,len;
    char str[100]={0};
    scanf("%[^\n]%*c",str); 
    len=strlen(str);
    scanf("%d",&k);
    k=k%26;
    for(i=0;i<len;i++)
    {
        if(str[i]<'A'||(str[i]>'Z'&&str[i]<'a')||str[i]>'z')
        str[i]=str[i];
        else
        {
            if(str[i]>='a'&&str[i]<='z')
            {
                if(str[i]-96<=26-k)
                str[i]=str[i]+k;
                else
                str[i]=str[i]+k-26;
            }
            else
            {
                if(str[i]-64<=26-k)
                str[i]=str[i]+k;
                else
                str[i]=str[i]+k-26;
            }
        }
    }
    for(i=0;i<len;i++)
    printf("%c",str[i]);
    return 0;
}

img

循环遍历字符串的每个字符,如果在'a'-'z'或'A'-'Z'之间,则按规则进行增加k值,可将字符减去开头字符得到差值,加上k再求余后得到加密后字符。