/*字符串逆序(递归实现)

  【题目内容】

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

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

      要求:不能使用C函数库中的字符串操作函数。

      比如 :

      char arr[] = "abcdef";

      逆序之后数组的内容变成:fedcba*/

1、非递归

/*
思路:
逆置字符串,循环的方式实现非常简单
1. 给两个指针,left放在字符串左侧,right放在最后一个有效字符位置
2. 交换两个指针位置上的字符
3. left指针往后走,right指针往前走,只要两个指针没有相遇,继续2,两个指针相遇后,逆置结束
*/
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
void reverse_string(char* arr)
{
char* left = arr;
char* right = arr + strlen(arr) - 1;
char temp = arr;
while (left < right)
{
temp =*left;
*left = *right;
*right = temp;
left++;
right--;
}
}
int main()
{
/*字符串逆序(递归实现)
【题目内容】
编写一个函数 reverse_string(char* string)(递归实现)
实现:将参数字符串中的字符反向排列,不是逆序打印。
要求:不能使用C函数库中的字符串操作函数。
比如 :
char arr[] = "abcdef";
逆序之后数组的内容变成:fedcba*/
char arr[] = { "kpppkkkbihbihi" };
int i = 0;
reverse_string(arr);
for (i = 0; i < strlen(arr); i++)
{
printf("%c", arr[i]);
}
return 0;
}

2、递归

/*
递归方式:
对于字符串“abcdefg”,递归实现的大概原理:
1. 交换a和g,
2. 以递归的方式逆置源字符串的剩余部分,剩余部分可以看成一个有效的字符串,再以类似的方式逆置
*/
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.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()
{
/*字符串逆序(递归实现)
【题目内容】
编写一个函数 reverse_string(char* string)(递归实现)
实现:将参数字符串中的字符反向排列,不是逆序打印。
要求:不能使用C函数库中的字符串操作函数。
比如 :
char arr[] = "abcdef";
逆序之后数组的内容变成:fedcba*/
char arr[] = { "kpppkkkbihbihi" };
int i = 0;
reverse_string(arr);
for (i = 0; i < strlen(arr); i++)
{
printf("%c", arr[i]);
}
return 0;
}