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

在这里插入图片描述

目录

  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;

}

猜你喜欢

转载自blog.csdn.net/dongming8886/article/details/124436946