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

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

 题型思路:

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

题目要求:使用递归实现代码,不能使用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<right设为条件,在left下标小于right的情况下将left下标所对应的字符通过新定义的中介变量tmp传给right,然后执行left++;right--;一直循环所有字符调换完,left大于right时跳出循环。

 请看代码  

                                                                        迭代

#include<stdio.h>
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<right)
	{
	char tmp=str[left];   
	str[left]=str[right];         //以下我会画图,图形去理解
	str[right]=tmp;
	left++;
	right--;	
	}
	
}
int main()
{
	char arr[]={};
	scanf("%s",arr);

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

 

                                                                    

                                                                          递归

#include<stdio.h>
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;
} 

画图理解递归思路

 

  • 6
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ZHANGZH-

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值