反转字符串之递归

本文详细介绍了如何使用递归方法反转给定的字符串,包括递归约束条件(字符串长度大于2),以及递归函数的具体实现。通过实例演示了如何在C语言中利用指针操作反转字符串并提供了一个简单的主函数示例。
摘要由CSDN通过智能技术生成

如何反转一个给定的字符串?这里有两种方式:一种时双指针的方式,另一种是递归的方式;如果对双指针的方式还不了解的话,请看我之前写过的文章http://t.csdnimg.cn/OLvki。那么我这次主要说的是用递归的方式进行字符串的反转,如过不会或者不了解的话,那么在看完这篇博客之后你会对字符串的反转和对递归过程有一次更加深层次的理解。话不多说,直接上才艺。

1.定义一个字符串数组 str :假设 str[]="abcdef";

2.递归函数:任何递归函数都一定会有递归约束条件,一旦达到约束条件时就会结束递归过程中的递过程而开始归的过程。如果没有约束条件,那么函数就会重复调用该函数,形成死递归。无论是在学习还是写项目的中,这都是非常忌讳的。那么字符串的递归结束条件又是什么呢?由于字符串的长度 len2>=2 时才有反转字符串的说法。因此,字符串的长度 len>=2 就是递归约束件。

3.实现递归函数:反转字符串就是把字符串逆序而已,所以,我们可以字符变量 tmp 存放首字符,把最后一个字符放在首字符的位置。由于我们已经保存了第一个字符且最后一个字符放在起始位置,所以把最后一个字符的位置放入字符串结束表示 '\0' ,同时回归过程中 tmp 存放的字符也是放在这个位置;这时判断字符串长度,如 len>=2 那就符合递归条件,则调用递归函数传入字符串为 str+1 ,为什么时 str+1 ?因为我们已经把每次递归字符串的最后一个字符放在起始位置,那么该位置的字符就不需要纳入递归的范畴。函数在回归过程中会把 tmp 存放的字符放入当前字符串的最后一个字符位置即是添加 '\0' 的位置。

4.至此,递归逆序字符串就完成了。如果有不清楚的地方可以在纸上画出递归的过程,那就回清晰很多。

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void reverse(char* str)   //指针和数组的方式都可以改变原值
{
	char tmp = str[0];    //递归过程中保存首字符
	int len = strlen(str);//递归中字符串的长度
	str[0] = str[len - 1];//把每次递归中的最后一个字符放在首字符的位置
	str[len - 1] = '\0';  //存放字符结束标志,回归时放入暂存字符的位置
	if (strlen(str) >= 2) //递归约束条件(字符串长度大于等于2时,才需要反转)
	{
		reverse(str + 1); //起始位置字符已反转,则传入已第二个字符为起始位置的字符串
	}
	str[len - 1] = tmp;   //回归过程中,把每次暂存的第一个字符放到最后一个字符的位置
}
int main()
{
	char str[10];
	scanf("%s", str);
	reverse(str);
	printf(str);
	return 0;
}

以上为自己对逆序字符串的一些见解;如果有误,请大家不吝指正!!!!

  • 11
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

她没有救赎

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

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

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

打赏作者

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

抵扣说明:

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

余额充值