C语言:字符串翻转的递归方法

编写一个函数 reverse_string(char * string)(递归实现)
//实现:将参数字符串中的字符反向排列。
//要求:不能使用C函数库中的字符串操作函数。
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
char* reverse_string(char*str)
{
 if (*str)
 {
  char* start = str;
  char* end = start+strlen(str) - 1;
  char tmp = *start;
  *start = *end;
  *end = '\0';
  reverse_string(str + 1);
  *end = tmp;
 }
 return str;
}
int main()
{
 char str[10] = "abcd";
 
 printf("%s", reverse_string(str));
 system("pause");
 return 0;
}

 

字符串的反转的递归方法需要抛弃掉,平常思路下的反转方式。

首先我们整理下思路,要将字符串反转,需要将前面的字符调到后面去;

首先,我们将字符串的第一个字符变成最后一个字符,并将第一个字符存起来,将最后一个字符变成‘\0’;

比如:将ABCD反转

第一次递归:ABCD------>DBC'\0',将A存在tmp中,进行递归函数F(str+1)变成DBC'\0';

第二次递归:DBC'\0'------->DC'\0''\0',将B存在了tmp中,因为递归时传入的参数是str+1,所以首元素变成了B;

第三次递归:DC'\0''\0'------->D'\0'\0''\0',将C存在了tmp中。

因为接下来不满足if条件,所以递归开始返回,首先返回D然后依次返回CBA。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值