字符串逆序不一样的解法(递归)

在这里插入图片描述

目录

  1. ✨常规解法
  2. ✨不一样的解法(递归)

前言

前段时间在做题的时候,看见一题字符串逆置的题目,刚开始我寻思着这不挺简单的吗?
在这里插入图片描述

我咔咔开始写,后来发现题目要求居然要我用递归求解!!

题目描述:
编写一个函数 reverse_string(char * string)(递归实现)
不能使用C函数库中的字符串操作函数

在这里插入图片描述

那时刚学完C语言函数,只是短短认识了几个递归求解的题目。我滴亲娘,该怎么搞呀!而且它只能有一个参数!!在这里插入图片描述

没办法了,当时只能找教程了,现在我就再复刻一下当时的题目,教大家如果用递归逆置字符串!

下面第一个是我当时写的常规解法:

✨常规解法

常规解法就是用left指向第一个下标,用right指向倒数一个下标,将第一个和倒数第一个交换,然后移动左右下标,再将第二个和倒数二个交换…直到 left=right就结束
在这里插入图片描述

void reverse_string(char* arr)
{
	char *left = arr;
	char *right = arr+strlen(arr)-1;
 
 
	while(left<right)
	{
		char tmp = *left;
		*left = *right;
		*right = tmp;
 
 
		left++;
		right--;
	}
}

✨不一样的解法(递归)

学的递归解法:
递归思想就是大事化小:要逆置/abcdef
可以转变成 先逆置:/bcde\
然后再变成逆置/cd

例如“abcdef”第一次进去就是首先要求字符串长度,找到最后一个,然后先把它存储起来,再把最后一个位置的元素置成“\0”;再把下一个元素的指针传给这个函数,下一次进去就变成“bcde”,
之后就再重新求字符串长度,再把最后一个字符存储起来,把最后一个位置成“\0”,
继续重复以上步骤直到字符长小于2就停止
然后嘞在调完递归后依次把字符交换即可

要注意题目要求是不能用C语言库函数,所以不能使用strlen来求字符串长度,但是我们可以自己模仿实现一个my_strlen求字符串长度
在这里插入图片描述

代码实现>

//计算字符串长度
int my_strlen(char* p)
{
	int count = 0;
	while (*p != '\0')
	{
		count++;
		p++;
	}
	return count;
}
//逆置字符串
void reverse_string(char* p)
{
	int len = my_strlen(p);	
	char tem = *(p + len - 1);
	*(p + len - 1) = '\0';
	if (my_strlen(p + 1) >= 2)
	{
		reverse_string(p + 1);
	}
	*(p + len - 1) = *p;
	*p = tem;

}

评论 19
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小明的c++笔记本

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

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

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

打赏作者

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

抵扣说明:

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

余额充值