gpt4 book ai didi

c - 使用递归反转字符串

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

我从互联网上获得了这段代码,但我无法获得完整的代码。例如 if(*str) 。这段代码是什么意思?还可以返回一个字符串吗?我认为 main 中的数组可以更改直接在函数中但这里它被返回..

#include<stdio.h>
#define MAX 100
char* getReverse(char[]);

int main(){

char str[MAX],*rev;

printf("Enter any string: ");
scanf("%s",str);

rev = getReverse(str);

printf("Reversed string is: %s\n\n",rev);
return 0;
}

char* getReverse(char str[]){

static int i=0;
static char rev[MAX];

if(*str){
getReverse(str+1);
rev[i++] = *str;
}

return rev;
}

最佳答案

由于使用了静态变量,这不是最清晰的递归示例。希望代码对您来说总体上是清晰的,我怀疑让您感到困惑的部分与一开始让我感到困惑的部分是一样的。

if(*str){
getReverse(str+1);
rev[i++] = *str;
}

所以一行一行。

if(*str){

如果我们还没有到达空终止符。

     getReverse(str+1);

对字符串的下一个字符调用 getReverse 函数。到这里似乎很简单。但它似乎实际上可能不会逆转任何事情,因为这是下一行

     rev[i++] = *str;

我们将索引i分配给str开头的字符并递增i,但这里是棘手的部分。 i 可能不是你想的那样。 getReverse 在 i 递增之前被调用。而且 i 是静态的,因此更改将在函数调用之间持续存在。因此,假设我们有一个 5 个字母的单词,假设“horse”,我们最终将在堆栈上调用 6 次 getReverse。第 6 个不会执行任何操作,因为它在那里找到空终止符。诀窍在于,我们将以相反的顺序解决调用。首先,str 指向“e”的调用将解析并递增 i,因为所有其他调用仍在等待对 getReverse 的调用返回。所以最后的字母实际上是第一个被添加和递增的 i ,这就是这里可能令人困惑的地方。

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

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