C语言 字符串倒置的递归与非递归解法

本文详细介绍了如何实现字符串倒置,分别提供了非递归和递归两种方法。非递归解法通过双指针从两端向中间交换字符,而递归解法利用了字符串的递归特性,逐步调整字符串首尾字符直至达到目标状态。这两种方法在思路上有相似之处,但递归解法更注重递归条件的设定和更新。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

思路分析

字符串倒置函数的实现,需要我们在函数中使用left、right分别定位字符串的起点、末点,因此我们传参时需要字符串的首地址(str)、字符串的长度(len),将这两个位置的字母互换,然后让left++到字符串下一个地址,right–到字符串末尾的上一个地址,一直重复互换操作,直到不满足left < right,即可实现字符串倒置

递归与非递归解法大体的思路是相似的,只不过递归解法中需要考虑如何进行left和right的更新,以此逼近递归条件。

非递归解法

#incldue<stdio.h>
#include<string.h>
void reverse(char* str, int len)
{
	char* left = str;
	char* right = str + len - 1;
	while (left < right)
	{
		char tmp = *left;
		*left = *right;
		*right = tmp;
		left++;
		right--;
	}
}

递归解法

char* reverse(char* str, int len)
{
	if (*str == '\0')  //判断空串
	{
		return NULL;
	}
	if (len > 1)
	{
		char tmp = *str;
		*str = *(str + len - 1);

		//下一次进入函数时让最后一个字母暂时置为\0,传str + 1
		//也就完成了left++; right--; 的操作
		*(str + len - 1) = '\0';
		reverse(str + 1);
		
		//最后再把置为\0的字母,重复赋值
		*(str + len - 1) = tmp;
	}
	return str;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

失去梦想的小草

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

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

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

打赏作者

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

抵扣说明:

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

余额充值