C语言-通过递归实现字符串逆序

通过我们前两章对C语言函数和递归的学习,我们来做一题递归的题型

C语言-通过递归实现字符串逆序_第1张图片

 题型思路:

题目中心问题:将输入的字符串通过函数递归的方式输出逆向字符串

题目要求:使用递归实现代码,不能使用C函数库的字符串操作函数

大白话解题思路:

​​​​​​​

首先我们先考虑怎么用迭代的方式实现

①初始化一个char arr[ ],定义一个reverse_string 函数来实现字符反向排列在reverse_string函数当中需要定义两个整形变量来表示数组arr的首下标与尾下标,定义首下标为  int left=0,尾下标为int right,接下来要给right赋值,数组的尾下标是数组长度-1。

②由于我们不能使用C函数库中的字符串strlen操作函数来查字符个数,那就需要自定义一个函数,使用函数的嵌套调用,我们定义将第二个函数为my_strlen函数,因此int right=my_strlen(str)-1。在my_strlen函数中运用while循环我们将字符串的长度返回给right。

③现在我们在reversre_string函数中定义好了left和right的值,使用while循环将left

 请看代码  

                                                                        迭代

#include
int my_strlen(char* str)
{
	int count=0;
	while(*str!= '\0')    //字符串最后会有 '\0'符 表结束
	{
		count++;
		str++;
	}
	return count;        //将字符长度值返回
}

void reversre_string(char* str)
{	
	int left=0;
	int right=my_strlen(str)-1;    //求数组的字符长度自定义一个strlen库函数
	while(left

 

                         C语言-通过递归实现字符串逆序_第2张图片                                           

                                                                          递归

#include
int my_strlen(char* str)
{
	int count=0;
	while(*str!= '\0')    //字符串最后会有 '\0'符 表结束
	{
		count++;
		str++;
	}
	return count;        //将字符长度值返回
}

void reversre_string(char* str)
{	
	char tmp=*str;	//字符型tmp=首地址的字符 
	int len=my_strlen(str);
	*str=*(str+len-1);	//将最后一个字符赋给首地址字符 
	*(str+len-1)='\0';	//将最后一个字符赋'\0',先不赋值首字符 
	//判断条件 
	if(my_strlen(str+1)>=2)
	{
		reversre_string(str+1);
	} 
	*(str+len-1)=tmp; //将首字符赋给最后一个字符  
	
}
int main()
{
	char arr[]={};
	scanf("%s",arr);

	reversre_string(arr);	//数组名arr是数组arr首元素地址
	
	printf("%s\n",arr);
	return 0;
} 

画图理解递归思路

C语言-通过递归实现字符串逆序_第3张图片

 

你可能感兴趣的:(C语言,c语言,开发语言)