如何在casear密码加密中从'z'返回'a'

时间:2016-10-11 14:13:33

标签: 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 : '%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;
        }
    }
}

1 个答案:

答案 0 :(得分:1)

你不会得到一个&#39;因为你的第二个if仍在运行。第一个if将值更改为A或a,第二个if添加KEY值。如果你想让所有的z成为a而Z成为A,你想将其改为else if,如下所示:

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,它就会从字母表的开头开始。