编写一个函数reverse_string(char * string)(递归实现)

实现:将参数字符串中的字符反向排列。

要求:不能使用C函数库中的字符串操作函数。


如果原字符串是"abcdef",将它用递归的方式翻转成"fedcba";

则原数组内存的是  "abcdef\0"

调用函数先将字符a保存起来,将f换到a的位置,再将原f的位置置为"\0"

调用函数指针向前走一个位置,传给函数的参数字符串变为"bcde\0"

再将字符b保存起来,将e换到b的位置,再将原e的位置置为"\0"

调用函数指针向前再走一个位置,传给函数的参数字符串变为"cd\0"

再将字符c保存起来,将d换到c的位置,再将原d的位置置为"\0"

字符串变为"d\0";

然后 ,

退出一次函数调用,将保存起来的c放到"\0"的位置,参数字符串变为"dc\0"

退出一次函数调用,再将保存起来的b放到"\0"的位置,参数字符串变为"edcb\0"

退出一次函数调用,再将保存起来的a放到"\0"的位置,参数字符串变为"fedcba\0"


字符串由长变短再变长

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<assert.h>
char reverse_string(char * string)
{
	assert(string);
	int len = strlen(string) - 1;
	char tmp;
	if (len > 0)
	{
		// 指针形式
		tmp = *string;
		*string = *(string + len);
		*(string + len) = '\0';
		reverse_string(string + 1);
		*(string + len) = tmp;

		// 数组下标形式
		/*tmp = string[0];
		string[0] = string[len];
		string[len] = '\0';
		reverse_string(string + 1);
		string[len] = tmp;*/
	}
	return string;
}
int main()
{
	char arr[] = {0};
	scanf("%s", arr);
	printf("原字符串是:>  %s\n",arr);
	reverse_string(arr);
	printf("翻转后的字符串是:>%s\n",arr );
	system("pause");
	return 0;
}

递归实现 参数字符串中的字符反向排列_C语言     递归