递归方法实现字符串逆序

递归方法实现字符串逆序

  • 问题描述
  • 思路分析
  • 代码展示
  • 结果展示
  • 总结

问题描述

编写一个递归函数
实现:将参数字符串中的字符反向排列,不是逆序打印
要求:不能使用C函数库中的字符串操作函数。
比如 :
char arr[] = “abcdef”;
逆序之后数组的内容变成:fedcba

思路分析

递归方法实现字符串逆序_第1张图片

根据这个图,相信大家对这道题目的思路就清晰了。
总体来说,就是将递推分为两个部分:推进和回归。
推进:先让字符串第一个和最后一个字符对应,每次把最后一个字符赋值给第一个字符,并且把第一个字符存放到num中去,将最后一个字符赋值为 \0(目的是让下一次计算sz时,sz能够有所改变),然后string+1,进入下一次函数。直到遇到第一个\0,推进就结束了。
回归:因为每次把第一个字符都存在了num中,所以只需要把num赋值给对应位置的字符就行了,即*(string+sz-1)=num。

代码展示

下面是所有的代码:

#include
//首先写一个my_strlen,计算字符串长度
int my_strlen(char* arr)
{
	int count = 0;
	while(*arr != '\0')
	{
		count++;
		arr++;
	}
	return count;
}
void reverse_string(char* string)
{
	int sz = my_strlen(string);
	int num = 0;
	if (*string != '\0')
	{
		num = *string;
		*string = *(string + sz - 1);
		*(string + sz - 1) = '\0';
		reverse_string(string + 1);
		*(string + sz - 1) = num;
	}
}
int main()
{
	char arr[] = "abcdef";
	reverse_string(arr);
	printf("%s", arr);
	return 0;
}

注意:题目要求不能用库函数,所以就写了一个my_strlen函数,其作用和strlen函数是一样的。

结果展示

递归方法实现字符串逆序_第2张图片

总结

这道题昨天想了半天没有想出来,那是因为我昨天没有画出它的流程图。
今天只画了几分钟画了它的流程图,代码就呼之欲出,清晰可见!
所以递归的问题并不算很难,只要大家愿意花一些时间好好思考,多练多想,一定可以很容易做出来的!

你可能感兴趣的:(算法,c++,开发语言)