gpt4 book ai didi

C 中的 Caesar Cypher 给出不正确的输出

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

尝试在 C 中创建一个 Caesar Cypher,并在移动字母时从超过 'z' 的小写字母中获得一些麻烦的输出

#include <stdio.h>

void confab(const char* inText, int shift, char* outText)
{
int i = 0;
int j = 0;
char character = '\0';
while (inText[i] != '\0') {
if (inText[i] >= 'A' && inText[i] <= 'Z') {
character = inText[i] + shift;
if (character > 'Z') {
character = character - 'Z' + 'A' - 1;
}
outText[j] = character;
j += 1;
} else if (inText[i] >= 'a' && inText[i] <= 'z') {
character = inText[i] + shift;
if (character > 'z') {
character = (character - 'z' + 'a' - 1);
}
outText[j] = character;
j += 1;
} else {
outText[j] = inText[i];
j += 1;
}
i += 1;
}
}


int main(void)
{
char buffer[60] = {0};
char* s = "The quick brown fox jumps over the lazy dog.";
confab(s, 13, buffer);
printf("%s\n", buffer);
}

正在给出输出:

Gur d\202vpx oeb\204a sb\205 w\202zc\200 b\203re \201ur yn\207\206 qbt.

代替:

Gur dhvpx oebja sbk whzcf bire gur ynml qbt.

怀疑我的 ASCII 算法在小写字母的 if 语句中不正确。

最佳答案

您的代码存在的问题是 character 变量被声明为带符号的 1 字节数字。

所以通过查看 ASCII table , a-z 的范围是 97-122。问题是当您尝试移动超过 5 个时,它会溢出,因为带符号的 1 字节数不能超过 127

因此,将 char character = '\0'; 更改为 unsigned char character = '\0'; 即可。

您可以在这里引用任何字节的最大整数数量 - https://en.wikipedia.org/wiki/Integer_(computer_science)#Common_integral_data_types

关于C 中的 Caesar Cypher 给出不正确的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45752155/

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