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

ang*_*ena 0 c string recursion

我很确定这是一个菜鸟问题,但我无法找到问题的解决方案.我正在尝试创建一个递归函数,它接受一个字符串'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);
    }
}
Run Code Online (Sandbox Code Playgroud)

我正在学习C,而且我对递归函数不太好,所以如果有更好的方法来实现这个功能,请告诉我.另外,英语不是我的母语,对任何拼写错误都很抱歉.谢谢.

Bey*_*ios 5

你的问题在这里:

ret == TRUE; // should be ret = TRUE;
Run Code Online (Sandbox Code Playgroud)

也许你可以用不同的方式来思考你的问题:不是在字符串中两次,而是从字符串的begin(i)和end(j)开始.在i和处交换字符j并递增计数器(或分别递减)直到到​​达中间位置.

像这样(这里的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;
}
Run Code Online (Sandbox Code Playgroud)