我编写了一个使用递归来反转字符串的程序.但我得到的输出总是一个空字符串.
我想知道我的逻辑有什么问题?
#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;
}
Run Code Online (Sandbox Code Playgroud)
输出:

打印我得到的个人字符,
你的字符串实际上是6个字节长 - 'h', 'e', 'l', 'l', 'o', '\0'.最后一个字符是空字节,它是一个字符串终止符.它用信号通知功能,如printf或strlen其中串结束.当你调用时reverse,它会反转整个字符串,所以现在终结符是第一个字节,并将其printf解释为空字符串.
有两种方法可以解决这个问题.将传递的索引设置为reverse较小(调用reverse(a, 0, n-2)),或使用strlen而不是sizeof(int n = strlen(a)).
| 归档时间: |
|
| 查看次数: |
251 次 |
| 最近记录: |