如何在casear密码加密中从“z”返回到“a”

如何在casear密码加密中从“z”返回到“a”,c,C,我正在尝试使用C中的casear密码对消息进行加密,当我在消息中发现字符“z”时,我尝试返回字符“a”by-=25,但它不会返回字符“a”,而是返回字符“b”,我也尝试了使用-=26和-=24,但没有返回到“a”,任何评论都将不胜感激。这是我的密码 void casear_cipher(char *message); int main() { char message[] = "Todayzzz is Tuesday"; printf("Original Message is :

我正在尝试使用C中的casear密码对消息进行加密,当我在消息中发现字符“z”时,我尝试返回字符“a”by-=25,但它不会返回字符“a”,而是返回字符“b”,我也尝试了使用-=26和-=24,但没有返回到“a”,任何评论都将不胜感激。这是我的密码

void casear_cipher(char *message);
int main()
{
    char message[] = "Todayzzz is Tuesday";
    printf("Original Message is : '%s'\n", message);

    casear_cipher(message);

    printf("Encrypted Message is: '%s'\n", message);
}

void casear_cipher(char *message)
{
    int i;
    int message_length = strlen(message);
    for(i = 0; i<message_length; i++)
    {
        if(message[i] == 'z' || message[i] == 'Z')
        {
            message[i] -= 25; //<-------------------------Problem is here
        }

        if( (message[i] >= 'a' && message[i] <= 'z') || (message[i] >= 'A' && message[i] <= 'Z') )
        {
            message[i] += KEY;
        }
    }
}

你不会得到“a”,因为你的第二个if仍然运行。第一个if将值更改为A或A,第二个if添加键值。如果希望所有z都变成a,并且z变成a,则需要将其更改为else,如果是这样:

if(message[i] == 'z' || message[i] == 'Z')
{
    message[i] -= 25; 
}

else if( (message[i] >= 'a' && message[i] <= 'z') || (message[i] >= 'A' && message[i] <= 'Z') )
{
    message[i] += KEY;
}
我想你想要的是更像这样的东西:

if((message[i] >= ('z' - KEY + 1) && message[i] <= 'z') || (message[i] > (('Z' - KEY + 1)) && message[i] < 'Z'))
{
    message[i] -= 26;
    message[i] += KEY;
}

else if((message[i] >= 'a' && message[i] <= 'u') || (message[i] >= 'A' && message[i] <= 'U'))
{
    message[i] += KEY;
}

这样,每当任何值超过Z或Z时,它都从字母表的开头开始。

熟悉C类型。h@Olaf. “我不认为这能解决OP的问题,尽管这通常是一个很好的建议。”物理学家:评论不是为了回答。这是非常基本的。再努力一点。一张纸和一支铅笔在这里可能会有帮助。你是如何来传达信息[i]>='v'?如果钥匙是17怎么办?呜呜我的坏我做了一个虚拟钥匙忘了改变它,当我张贴。我会编辑的。谢谢。这真的很有帮助。