gpt4 book ai didi

c - 下面的代码是什么,给出垃圾字符作为凯撒密码加密算法的输出?

转载 作者:行者123 更新时间:2023-11-30 16:55:59 26 4
gpt4 key购买 nike

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int count=0;
int main(){
int n;
scanf(" %d",&n);
char *s = (char *)malloc(10240 * sizeof(char));
scanf(" %s",s);
int length=strlen(s);
char array[length+1];
int k;
scanf(" %d",&k);
while(*s!='\0')
{

char a= *s + k;
if(a>90 && *s<=90)
{
a=65+(k-1);
array[count]=a;
}
else if(a>122 && *s<=122)
{
a=97+(k-1);
array[count]=a;
}
else if (a >=0 && a<=64)
{
array[count]=a;
}
else if(a>=123 && a<=126)
{
array[count]=a;
}

count++;
s++;


}
array[count+1]='\0';
printf("%s",array);
return 0;
}

在下面的代码中,按字母顺序列出时,每个未加密的字母都将替换为其后出现“k”个空格的字母。将字母视为区分大小写且循环的;如果 'k' 旋转超过字母表的末尾,它将循环回到开头(即:'z' 之后的字母是 'a' ,'Z' 之后的字母是 'A' )。

我无法弄清楚我出错的地方,它为每个可能的字母输入序列打印 null 。加密字符串中的特殊符号不会改变。

最佳答案

k = 2; //<== random input
while (*s != '\0')
{
printf("count %d\n", count);
char a = *(s + k);
...
}

此循环转到字符串 s 的末尾,并且 char a 尝试提取当前字符之后 k 个位置的字符指数。

因此,当您位于字符串末尾时,*(s + k) 超出范围。我建议重写代码如下:

int i;
for (i = 0; i < length; i++)
{
if (i + k == length) break;
if (i + k < 0) break; //assuming k can be negative
char a = s[i + k];
...
}

这样,i+k 始终是 0length 之间的有效索引。

另一个问题在这里:

if (a>90 && *s <= 90)
{
a = (char)(65 + (k - 1));
array[count] = a;
}
else if (a>122 && *s <= 122)
{
a = (char)(97 + (k - 1));
array[count] = a;
}
else if (a >= 0 && a <= 64)
{
array[count] = a;
}
else if (a >= 123 && a <= 126)
{
array[count] = a;
}
count++;

无法保证至少满足这些条件。事实上,所有条件很可能都是假的。因此,发生的情况是 array[0] 仍未初始化,但 count 仍然递增,因此 array 在末尾包含垃圾。应该对其进行更改,以便仅在设置了 array[count] 时才递增 count

对于凯撒加密,您需要将字符向左或向右移动。您可以使用 % 运算符来完成此操作。

strcpy(s, "ABCDEFGZ");
int length = strlen(s);
char *array = malloc(length + 1);
int shift = 2;
int i;
for (i = 0; i < length; i++)
{
char c = s[i];
if (c >= 'A' && c <= 'Z')
c = 'A' + (c - 'A' + shift) % 26;
array[i] = c;
}
array[i] = 0;

请注意,当 'Z' 向右移动时,% 运算符确保它返回到 'A' 之间的范围到'Z'

上面的函数并不完整,对小写字母不起作用,那是给你做作业的……

关于c - 下面的代码是什么,给出垃圾字符作为凯撒密码加密算法的输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40093296/

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