gpt4 book ai didi

c - Vigenere 给出错误的结果

转载 作者:太空宇宙 更新时间:2023-11-04 07:43:26 27 4
gpt4 key购买 nike

任务是在运行程序时给出关键字参数,我将其保存为string k,然后用户输入文本,程序将根据关键字输出输入的文本。 A = 0,B = 1,所以如果关键字是 ABABA,文本是 hello,它会输出 hflmo。

如果我运行程序,将 argv[1] 作为“abc”,然后将纯文本 pt 作为“hello”,我应该得到“hfnlp”,但我得到“hnflv”,为什么最后一个字母没有正确加密?

    string k = argv[1];
int l = strlen(argv[1]);
printf("plaintext: ");
string pt = get_string("");
printf("ciphertext: ");
for (int i = 0, shift = 0; i < strlen(pt); i++)
{
if (!isalpha(pt[i]))
{
printf("%c", pt[i]);
}
else
{
if (isupper(pt[i]))
{
if (isupper(k[shift]))
{
printf("%c", (((pt[i] - 65) + (k[shift % l] - 65)) %26) + 65);
shift++;
}
else
{
printf("%c", (((pt[i] - 65) + (k[shift % l] - 97)) %26) + 65);
shift++;
}
}
else if (islower(pt[i]))
{
if (isupper(k[shift]))
{
printf("%c", (((pt[i] - 97) + (k[shift % l] - 65)) %26) + 97);
shift++;
}
else
{
printf("%c", (((pt[i] - 97) + (k[shift % l] - 97)) %26) + 97);
shift++;
}
}
}
}
printf("\n");
return 0;
}

最佳答案

线条

if (isupper(k[shift]))

缺少模计算。正确的版本是:

if (isupper(k[shift % l]))

如果将此计算放在 for 循环的某个中心位置,可能会更清楚:

shift %= l;

关于c - Vigenere 给出错误的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58705036/

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