我编写了一个程序来使用递归反转字符串。但是我得到的输出总是一个空字符串。
我想知道我的逻辑哪里出了问题?
#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;
}
输出:
打印我得到的单个字符,
最佳答案
您的字符串实际上是 6 个字节长 - 'h', 'e', 'l', 'l', 'o', '\0'
。最后一个字符是一个空字节,它是一个字符串终止符。它向 printf
或 strlen
等函数发出字符串结束的信号。当您调用 reverse
时,它会反转整个字符串,因此现在终止符是第一个字节,printf
将其解释为空字符串。
有两种方法可以解决这个问题。将传递给 reverse
的索引变小(调用 reverse(a, 0, n-2)
),或者改用 strlen
sizeof
(int n = strlen(a)
).
关于c - 使用递归在 C 中反转字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26974520/