gpt4 book ai didi

c - 使用 fgets 获取输入并使用递归反向输出答案

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

这是书中的示例片段。我不明白它是如何反向打印字符串的。第一次调用 reverse 时,假设输入了有效的字符串,则 0 处的元素不为 null。在 else 语句中,我们再次调用该函数,传入索引 1 处元素的地址。

假设我输入了“hello”。然后我传递e的地址。然而,第二次调用reverse时,字符串是如何遍历的呢?正在检查的索引仍然是 1。另外,在我看来,我们没有替换数组的值。当我们开始使用 putchar 打印值时,我很困惑,索引 0 处的值从数组的最后一个元素开始。我知道,当我们使用递归并达到基本情况时,由于项目被放入堆栈中,我们从堆栈指针的顶部开始读取它们,直到末尾,这就是相反的原因。但在这里我没有看到这种情况发生。

硬编码索引

reverse( &ptr[1]);
putchar(ptr[0]);

对我来说没有意义。我想当每次在递归中传递相同的地址时,我很难看到字符串是如何遍历的。请帮助我了解发生了什么。

为了简单起见,我对代码做了一些修改,但它的作用与书中的代码相同。

#include <stdio.h>

void reverse(char * ptr);

int main(){
char sentence[10];
printf("enter text \n");
fgets(sentence, 10, stdin);
printf("The line is: \n");
reverse(sentence);
return 0;
}

void reverse( char * ptr){
if(ptr[0] == '\0'){
return;
} else{
reverse( &ptr[1]);
putchar(ptr[0]);
printf("\n");
}
}

最佳答案

&ptr[1] 相当于 ptr + 1。现在,如果您将 ptr 视为一个数字(确实如此),那么很明显,它不是每次传递的数字都是相同的,而是每个递归级别都传递一个更大的数字。它基本上是传递从第二个字符开始的子字符串,只是在 C 中,子字符串不是一个单独的对象,而是指向同一字符串中不同位置的指针。

关于c - 使用 fgets 获取输入并使用递归反向输出答案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53989687/

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