栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

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

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

目录
  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
		char tmp = *left;
		*left = *right;
		*right = tmp;
 
 
		left++;
		right--;
	}
}
✨不一样的解法(递归)

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

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

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

代码实现>

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

}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/847963.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号