gpt4 book ai didi

C 中凯撒代码的结果附加字母

转载 作者:行者123 更新时间:2023-11-30 19:21:19 25 4
gpt4 key购买 nike

#include <stdio.h>

void caesar(char bemenet[], char eredmeny[], int n){
int i = 0;
for(i = 0; bemenet[i] != '\0'; i++) {
if(bemenet[i] == 'z') {
eredmeny[i] = 'a';
eredmeny[i] += n-1;
}
else
{
eredmeny[i] += n;
}
}
eredmeny[i] = '\0';
}

int main(){
char tomb1[]="caesarkodolas";
char tomb2[]="";

caesar(tomb1,tomb2,1);

printf("%s \n",tomb2);

return 0;
}

我的“eredmeny”(结果)是这样的:“dbftbslpepmb”但是 tomb2=> ☺dbftbslpepmb 不行..因为我有一个额外的字符 |☺|..

最佳答案

为第二个参数分配足够的内存,并更改此行

eredmeny[i] += n;

对此:

eredmeny[i] = bemenet[i] + n;

请注意,这不是 Caesar cipher 的防弹实现:它适用于 n==1,但对于更大的 n 会损坏。

您需要考虑一种不同的方式来实现“环绕”:不是测试 'z' 并将其替换为 'a',而是计算字母模 26 的新位置,然后添加 a 到它:

void caesar(char bemenet[], char eredmeny[], int n){ 
int i;
for(i = 0; bemenet[i] != '\0'; i++) {
// Compute the position of the replacement letter
int pos = (bemenet[i] - 'a' + n) % 26;
// Place the letter into the output.
eredmeny[i] = 'a' + pos;
}
eredmeny[i] = '\0';
}

demo.

关于C 中凯撒代码的结果附加字母,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20219109/

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