gpt4 book ai didi

C - (递归地)给定一个字符串,返回它的反向

转载 作者:太空宇宙 更新时间:2023-11-04 06:27:00 25 4
gpt4 key购买 nike

我很确定这是一个菜鸟问题,但我找不到问题的解决方案。我正在尝试制作一个递归函数,它接受一个字符串 's' 并返回该字符串但反转。我发现我可以用两个函数来做到这一点,一个是将字符从字符串复制到辅助字符串,另一个是再次从辅助字符串复制到原始字符串(但这次是倒置的)。但是我想制作一个可以完成所有这些的功能。这就是我制作该功能的方式,但它不起作用:

/* external variables */

#define TRUE 1
#define FALSE 0

int e = 0;
i = 0;
int ret = FALSE;
char Saux[255];

void Inverse(char s[], int i) {
if (s[i] == '\n' || ret == TRUE) {
if (ret == FALSE) {
ret == TRUE;
i -= 1;
}
if (i == 0) {
s[e] = Saux[i];
return;
} else {
s[e++] = Saux[i];
return Inverse(s, i - 1);
}
} else /* this will happen until s[ i ] == '\n' */
{
Saux[i] = s[i];
return Inverse(s, i + 1);
}
}

我正在学习 C,我不太擅长递归函数,所以如果有更好的方法来制作这个函数,请告诉我。另外,英语不是我的母语,对于任何拼写错误,我们深表歉意。谢谢。

最佳答案

你的问题在这里:

ret == TRUE; // should be ret = TRUE;

也许您可以用不同的方式思考您的问题:不要遍历字符串两次,而是从开头 (i) 和结尾 (j) 开始) 的字符串。交换 ij 处的字符并递增计数器(或分别递减)直到到​​达中间。

像这样(这里的 end 表示最后一个元素,最初是字符串长度):

#include <string.h>

void swap(char* str, size_t i, size_t j) {
char tmp = str[i];
str[i] = str[j];
str[j] = tmp;
}

void reverse(char* str, size_t begin, size_t end) {
if(begin + 1 >= end)
return;
swap(str, begin, end - 1);
reverse(str, begin + 1, end - 1);
}

int main() {
char str[] = "foobar";
reverse(str, 0, strlen(str));
return 0;
}

关于C - (递归地)给定一个字符串,返回它的反向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25703437/

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