利用递归使字符串逆序(不是逆序打印)

题目要求

编写一个 reverse_string(char * str)函数

利用递归实现将参数字符串中的字符反向排列,不是逆序打印不能使用C函数库中的字符串操作函数。

eg :char arr[] = “abcdef”;
逆序之后数组的内容变成:fedcba

主函数

int main()
{
	char arr[] = "abcdef";
	printf("%s\n", arr);//打印内容变更前
	reverse_string(arr);
	printf("%s\n", arr);//打印内容变更后
	system("pause");//在Visual Studio 2013中显示结果
	return 0;
}

交换函数

根据题目我们能想到的是
先将"abcdef"-> “fbcdea”,a和f交换
再将"fbcdea"-> “fecdba”;b和e交换
最后"fecdba"-> “fedcba”;c和d交换
因此我们先写出一个交换函数

//利用异或实现交换问题(上篇文章有详细的解说👆)
void swap(char *a, char *b){
	*a ^= *b;
	*b ^= *a;
	*a ^= *b;
}

reverse_string函数

按照题目要求编写reverse_string函数

void reverse_string(char * str){
	if (NULL == str){//当传入的函数为空时
		return;
	}
	reverse_string_helper(str, 0, strlen(str)-1);
}

reverse_string_helper函数

为了能够实现从两边向内逐字更换字符,编写一个新函数

void reverse_string_helper(char * str, int start, int end)

start:从左往右所指向的字符
end:从右往左所指向的字符

void reverse_string_helper(char * str, int start, int end){
	if (start >= end){//判断遍历是否结束
		return;
	}
	swap(&str[start++], &str[end--]);//向中间遍历
	                                 //注意start++和end--先赋值在自增,因此下面递归时start和end数值已经更新
	reverse_string_helper(str,start,end);//递归调用进行下次一交换
}

结果

因此,我们得到结果为
在这里插入图片描述
欢迎大家评论,一起努力一起进步呐~
喜欢的小伙伴,下方点个赞呦~

  • 11
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 12
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值