字符串逆序(递归实现)

简介: 字符串逆序(递归实现)

编写一个函数 reverse_string(char * string)(递归实现)


实现:将参数字符串中的字符反向排列,不是逆序打印。


先介绍函数递归的概念


简单来说就是,函数自己调用自己的过程,简称函数递归


实现函数递归,有两个条件


1,存在限制条件。
2,每次递归之后,越来越接近限制条件。


根据题目要求,可知通过函数 reverse_string(char * string),

先将整个字符串逆序,然后再打印

如果没有理解题目要求,可能会逆序一个字符就立马打印,这个思考方式还是有所欠缺的


接下来就来思考如何去实现这个函数


fcd9c73bcd969f4d51327981d6f209d2_b8a8eeffaec04bf281818dee2e0fcba4.png


代码如下


#include<stdio.h>
int my_strlen(char* str)
{
  if (*str != '\0')
  {
  return 1 + my_strlen(str + 1);
  }
  else
  {
  return 0;
  }
}
void Reverse(char* str)
{
  int len = my_strlen(str);
  //1.将第一个字符存放到临时创建的字符变量中
  char c = 0;
  c = *str;
  //2.将最后字符串最后一个字符存放到第一个字符的位置
  *str = *(str + len - 1);
  //3.将字符串中最后一个字符设置为'\0'
  *(str + len - 1) = '\0';
  //4.逆序中间的字符串(从第二个字符到倒数第二个字符)
  if (my_strlen(str + 1) > 1)
  {
  Reverse(str + 1);
  }
  //5.将临时创建的字符变量里存放的第一个字符,存放到字符串
  //最后一个字符的位置
  *(str + len - 1) = c;
}
int main()
{
  char ch[] = "abcdef";
  printf("逆序前:%s\n", ch);
  Reverse(ch);
  printf("逆序后:%s\n", ch);
  return 0;
}


运行结果

066419220988a00dc5d260d4045704a1_125be5bfbdbd419287da548bbb8af3fe.png


目录
相关文章
|
3月前
字符串逆序
字符串逆序
28 2
|
5月前
|
算法 Java
双指针在数组遍历中的应用
文章深入探讨了双指针技术在数组遍历中的应用,通过实战例子详细解释了快慢指针和首尾指针的不同用法,并提供了解决LeetCode相关问题的Java代码实现。
顺序表应用7:最大子段和之分治递归法
顺序表应用7:最大子段和之分治递归法
|
机器学习/深度学习
求n的阶乘(递归法和循环法
根据阶乘的计算方法:n!= 1 * 2 * 3*…*n,我们在一个for循环完成 n 次乘法运算。注意因为是连乘,最终阶乘结果可能会非常大所以我们在Fac函数中用 long long 类型的变量来记录阶乘的结果。
每日三题-两数相加、反转链表、回文链表
每日三题 两数相加 反转链表 回文链表
115 0
每日三题-两数相加、反转链表、回文链表
字符串逆序(递归和非递归实现)
给连两个指针,left放在字符串左侧,right放在最后一个有效字符位置。 交换两个指针位置上的字符
字符串逆序(递归实现)——C语言
字符串逆序(递归实现)——C语言
字符串逆序(递归实现)——C语言
|
C++
C++解决汉诺塔问题(递归实现)
C++解决汉诺塔问题(递归实现)
458 0
C++解决汉诺塔问题(递归实现)
|
存储 C语言
字符串逆序不一样的解法(递归)
字符串逆序不一样的解法(递归)
116 0

热门文章

最新文章

下一篇
开通oss服务