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,而且我对递归函数不太好,所以如果有更好的方法来实现这个功能,请告诉我.另外,英语不是我的母语,对任何拼写错误都很抱歉.谢谢.
你的问题在这里:
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)