#include<stdio.h>
//#include<string.h>
int Strlen(char* arr)
{
int count = 0;
if (*arr != '\0')
{
count++;
Strlen(arr + 1);
}
return count;
}
void reverse_string(char* arr)
{
int sz = Strlen(arr);
char tmp = *arr;
*arr = *(arr + sz - 1);
*(arr + sz - 1) = '\0';
if (Strlen(arr + 1) >= 2)
reverse_string(arr + 1);
*(arr + sz - 1) = tmp;
}
int main()
{
char arr[] = "abcdef";
reverse_string(arr);
printf("%s\n", arr);
return 0;
}
先看代码,首先先定义一个求字符串长度的函数,其实这里可以使用库函数自带的函数来求只需要引入对应的<string.h>的头文件即可。接下来就是编写递归函数了,看下面一段代码
void reverse_string(char* arr)
{
int sz = Strlen(arr);//求出数组的长度
char tmp = *arr;//创建一个临时变量tmp来存放数组的的第一个字符
*arr = *(arr + sz - 1);
*(arr + sz - 1) = '\0';
if (Strlen(arr + 1) >= 2)
reverse_string(arr + 1);
*(arr + sz - 1) = tmp;
}
我们先使用指针变量来实现函数的接收,求出字符串后,就让第一个字符放到创建的临时变量中来,再使数组中下标最后的一个等于第一个字符。再使最后一个字符串变成 '\0' 让接下来的字符串判断可以更精准,实现递归的限制条件。
if (Strlen(arr + 1) >= 2)
reverse_string(arr + 1);
*(arr + sz - 1) = tmp;
最后判断逆转后的下一对字符长度是否大于等于2,因为只有这样才能使得两个字符可以逆转。接下来进入递归就可以实现字符倒序。
void reverse_string(char*arr)
{
while(l<r)
{
int l = 0;
int r = strlen(arr) - 1;
char tmp = *arr;
*arr = arr[r];
arr[r] = tmp;
l++;
r--;
}
}
int main()
{
char arr[] = "abcdef";
reverse_string(arr);
printf("%s\n", arr);
return 0;
}
这是不使用函数递归的方法来实现数组的倒序,比较简单,与使用递归的函数的思路大同小异。