gpt4 book ai didi

c - C中的简单凯撒移位

转载 作者:行者123 更新时间:2023-12-04 10:31:17 25 4
gpt4 key购买 nike

我正在尝试创建一个简单的 Caesar shift C 中的程序,但我似乎无法弄清楚。程序一直崩溃。任何帮助将不胜感激。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(int arc, const char* argv[])
{
int shift = atoi(argv[1]);
char message[256];
strcpy(message, argv[2]);
int i;
for(i = 0; i < strlen(message); i++) {
printf("%c", message[i] + shift);
}
putchar('\n');
return 0;
}

最佳答案

您没有正确实现凯撒密码。您的代码包含以下行,这是错误的:

printf("%c", message[i] + shift);

要正确执行此操作,您需要将其转换为函数:

printf("%c", encrypt(message[i], shift));

然后让我们实现函数:

char encrypt(char input, int shift) {
if (input >= 'a' && input <= 'z')
return ((input - 'a' + shift) % 26) + 'a';
if (input >= 'A' && input <= 'Z')
return ((input - 'A' + shift) % 26) + 'A';
return input;
}

只是为了解释数学在该函数中的作用:

  1. input - 'a' 告诉我们输入在字母表中的什么位置(假设输入是小写字母)。所以如果输入是'c',那么我们将得到一个2。如果输入是 'z',我们得到 25
  2. input - 'a' + shift 为我们提供了我们用来进行加密的字符的新位置。请注意,这可能比字母表(26 个字符)更大。
  3. 因此,为了解决该问题,我们使用模运算将该数字限制在 [0 - 25] 之间。
  4. 然后向该字符添加“a”即可获得我们想要打印的实际字符。

请注意,这仅适用于 azAZ 的字符代码是连续的.

关于c - C中的简单凯撒移位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18552477/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com