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

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

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

注意:将参数字符串中的字符反向排列,不是反向输出。

代码如下:

#include<stdio.h>
#include<stdlib.h>
#include<assert.h>

int my_strlen(char *str)//求字符串长度
{
	int count=0;
	while(*str++)
	{
		count++;
	}
	return count;
}

void reverse_string(char *str)
{
	int i=0;
	int len=my_strlen(str);
	assert(str);
	if(*str)
	{
		char temp=str[0];//交换第一个和最后一个字符,将最后一个字符制成’\0’
		str[0]=str[len-1];
		str[len-1]='\0';
		reverse_string(str+1);
		str[len-1]=temp;//递归调用完后将temp赋给最后一个字符
	}
}

int main()
{
	char ch[20]={0};
	gets(ch);
	reverse_string(ch);
	printf("%s\n",ch);
	system("pause");
	return 0;
}

reverse_string递归调用函数图

wKiom1ZB7oCCMI-IAABRfMvcpsg130.png

下面代码是通过递归将字符串逆序输出。

#include<stdio.h>
#include<stdlib.h>
#include<assert.h>

void reverse_string(char *string)
{
	assert(string);
	if(*string)
	{
		reverse_string(string+1);//通过压栈的形式,先进后出
	}
	printf("%c",*string);
}

int main()
{
	char ch[20]={0};
	gets(ch);
	reverse_string(ch);
	system("pause");
	return 0;
}