字符串逆序(递归实现)

字符串逆序(递归实现)

代码要求:

编写一个函数 reverse_string(char * str) 递归实现。
实现:将参数字符串中的字符反向排列。
要求:不能使用C函数库中的字符串操作函数。

代码思想:

要实现字符逆序我们可以先将最后一个字符与第一个字符互换,例如将‘abcdefg’变成‘gbcdefa’,然后逐个向里互换。

在这中间需要注意,我们要知道字符串的长度 这样才能知道最后一位字符的下标(即字符串长度减一),求字符串长度的函数也需要我们自己编写 (或可以调用现成的strlen库函数,此处题目要求自己写所以没有调用库函数)。

其中每次互换时,需将当前str指向的字符用tem变量保存起来,然后一直递归互换,每互换一次,都要将最后一个字符变成\0,这样才可以使递归中的最后一个字符一直在往前靠。直到递归到字符串中间时,这时后半部分已经逆序完成,又因为此时前半部分的字符被我们用tem保存起来了,所以直接将tem里面的值输出即可完成全部的逆序。

代码示例:

#include <stdio.h>
#include <stdlib.h>

int my_strLen(char str[]);//函数声明
void reverse_string(char str[]);//函数声明


int my_strLen(char str[]) {//需要一个求数组长度的函数 自定义一个my_strLen
	if (str[0] == '\0') {//当数组开头为结束标志符\0时 表示数组已经遍历完毕
		return 0;
	}
	return 1 + my_strLen(str + 1);//数组长度等于1 + 以第二个元素开头的数组长度
}
	
//逆序函数
void reverse_string(char str[]) {
	int len = my_strLen(str);//首先求出数组长度 长度-1即为数组内最后一个字符下标
	char tem = *str;//定义一个临时变量储存首字符的内容
	*str = *(str + len - 1);//将最后一个元素赋值给第一个字符,完成第一组逆序
	*(str + len - 1) = '\0';//将\0赋值给最后一个字符,使递归找到最后一个字符
	if (my_strLen(str) > 0) {//如果数组长度不小于0 则一直递归下去
		reverse_string(str + 1);
	}
	*(str + len - 1) = tem;//数组长度小于0,即后半部分已经逆序完毕
}						//此时将前半部分的值逐个速出即可,就是tem里面存储的值

int main() {
	char str[] = "abcdefg";
	printf("before :%s\n", str);
	reverse_string(str);
	printf("after :%s\n", str);

	system("pause");
	return 0;
}

结果演示:

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值