我正在尝试使用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;
}
}
}
答案 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,它就会从字母表的开头开始。