C语言中的递归反向数组
下面是我的代码的一部分,我试图递归地反转字符串:C语言中的递归反向数组,c,string,algorithm,recursion,reverse,C,String,Algorithm,Recursion,Reverse,下面是我的代码的一部分,我试图递归地反转字符串: char reverse[10]; gets(reverse); reverseString(reverse, (strlen(reverse) - 1)); void reverseString(char ar[], int n) { if (n == 0) { return; } else {
char reverse[10];
gets(reverse);
reverseString(reverse, (strlen(reverse) - 1));
void reverseString(char ar[], int n)
{
if (n == 0)
{
return;
}
else
{
int temp = ar[n];
ar[n] = *(ar);
*(ar) = temp;
reverseString((ar + 1), (n - 1));
}
}
当我输入字符串hello时,它会将字符串更改为ohell。我需要它把绳子完全倒转给奥利。有人能帮忙吗?因为您交换了数组的第一个和最后一个元素,所以应该递归地 使用剩余的n-2个元素而不是n-1调用函数 我假设代码中的reverseString和reverseAr是
实际上是相同的函数,可能是复制粘贴错误。既然交换了数组的第一个和最后一个元素,就应该递归地执行
# include <stdio.h>
/* Function to print reverse of the passed string */
void reverse(char *str)
{
if(*str)
{
reverse(str+1);
printf("%c", *str);
}
}
/* Driver program to test above function */
int main()
{
char a[] = "Geeks for Geeks";
reverse(a);
getchar();
return 0;
}
使用剩余的n-2个元素而不是n-1调用函数
我假设代码中的reverseString和reverseAr是
实际上是相同的函数,可能是复制粘贴错误。GET正在创建构建块。相反,交换完整的块,一旦它们被递归地交换块的内部。使用调试器查看实际被替换的内容。你会感到惊讶的…你没有在正确的时间停止递归。永远不要使用gets,它甚至不再是最新的标准。gets正在创建构建块。相反,交换完整的块,一旦它们被递归地交换块的内部。使用调试器查看实际被替换的内容。你会感到惊讶的…你没有在正确的时间停止递归。永远不要使用gets,它甚至不再是最新的标准。看起来OP想要字符串的就地反转。看起来OP想要字符串的就地反转。在你的答案中解决了奇数长度字符串的错误,停止条件n@zmo:关于你对现在删除的答案的评论:653421的反面应该是654321,而不是653421。该死,我在周日有阅读障碍:-你的答案中解决了奇数长度字符串的错误,停止条件n@zmo:关于你对现在删除的答案的评论:653421的反面应该是654321,而不是653421。该死,我星期天有诵读困难:-s
# include <stdio.h>
/* Function to print reverse of the passed string */
void reverse(char *str)
{
if(*str)
{
reverse(str+1);
printf("%c", *str);
}
}
/* Driver program to test above function */
int main()
{
char a[] = "Geeks for Geeks";
reverse(a);
getchar();
return 0;
}