字符串逆序(递归和非递归实现)

简介: 给连两个指针,left放在字符串左侧,right放在最后一个有效字符位置。交换两个指针位置上的字符

1、非递归实现

1.1思路:

给连两个指针,left放在字符串左侧,right放在最后一个有效字符位置。

交换两个指针位置上的字符

left指针往后走,right指针往前走,只要两个指针没有相遇,继续2,两个指针相遇后,逆置结束

1.2代码实现:

#include<stdio.h>
#include<string.h>
void reverse_string(char* arr)
{
  char* left = arr;
  char* right = arr + strlen(arr) - 1;
  while (left < right)
  {
  char tmp = *left;
  *left = *right;
  *right = tmp;
  left++;
  right--;
  }
}
int main()
{
  char arr[]="abcdefg";
  reverse_string(arr);
  printf("%s", arr);
  return 0;
}


2、递归实现

2.1思路:

交换a和g

以递归的方式逆置源字符串的剩余部分,剩余部分可以看成一个有效的字符串,再以类似的方式逆置

2.2代码实现:

#include<stdio.h>
#include<string.h>
void reverse_string(char* arr)
{
  int len = strlen(arr);
  char tmp = *arr;
  *arr = *(arr + len - 1);
  *(arr + len - 1) = '\0';
  if (strlen(arr + 1) >= 2)
  reverse_string(arr + 1);
  *(arr + len - 1) = tmp;
}
int main()
{
  char arr[]="abcdefg";
  reverse_string(arr);
  printf("%s", arr);
  return 0;
}
相关文章
|
9月前
字符串逆序(递归实现)
字符串逆序(递归实现)
71 0
|
9月前
递归和非递归分别实现求第n个斐波那契数
递归和非递归分别实现求第n个斐波那契数
42 0
|
10月前
字符串逆序(递归和循环)
字符串逆序(递归和循环)
汉诺塔(递归+ 非递归版)
汉诺塔问题(又称为河内塔问题),是一个大家熟知的问题。在A,B,C三根柱子上, 有n个不同大小的圆盘(假设半径分别为1-n吧),一开始他们都叠在我A上(如图所示),你的目标是在最少的合法移动步数内将所有盘子从A塔移动到C塔。 游戏中的每一步规则如下:
179 1
汉诺塔(递归+ 非递归版)
|
存储 C语言
字符串逆序不一样的解法(递归)
字符串逆序不一样的解法(递归)
77 0
字符串逆序不一样的解法(递归)
|
机器学习/深度学习 人工智能 算法
『递归』汉诺塔和全排列
使用递归编写一个程序实现汉诺塔问题,要求在输入圆盘数量之后,输出圆盘的移动步骤,输出格式示例如下: 第1步:1号盘从A柱移至B柱第2步:2号盘从A柱移至C柱
166 0
|
机器学习/深度学习
用递归和非递归实现斐波那契数列
用递归和非递归实现斐波那契数列
151 0
用递归和非递归实现斐波那契数列
|
算法 机器学习/深度学习