gpt4 book ai didi

c - 使用递归在 C 中反转字符串

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

我编写了一个程序来使用递归反转字符串。但是我得到的输出总是一个空字符串。

我想知道我的逻辑哪里出了问题?

#include<stdio.h>

void reverse(char a[], int start, int end)
{
char t;
if(start>=end)
return;
else
{
t = a[start]; a[start] = a[end]; a[end] = t;
reverse(a,++start,--end);
}
}

int main(void)
{
char a[] = "hello";
int n = sizeof(a)/sizeof(a[0]);
printf("Given string is : %s ",a);
reverse(a,0,n-1);
printf("Reversed string is : %s ",a);
return 0;
}

输出:

enter image description here

打印我得到的单个字符,

enter image description here

最佳答案

您的字符串实际上是 6 个字节长 - 'h', 'e', 'l', 'l', 'o', '\0'。最后一个字符是一个空字节,它是一个字符串终止符。它向 printfstrlen 等函数发出字符串结束的信号。当您调用 reverse 时,它会反转整个字符串,因此现在终止符是第一个字节,printf 将其解释为空字符串。

有两种方法可以解决这个问题。将传递给 reverse 的索引变小(调用 reverse(a, 0, n-2)),或者改用 strlen sizeof (int n = strlen(a)).

关于c - 使用递归在 C 中反转字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26974520/

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