题目:编写一个函数reverse_string(char * string)(递归实现)
实现:将参数字符串中的字符反向排列。
要求:不能使用C函数库中的字符串操作函数。
实现思想
要实现字符逆序我们先将最后一个字符与第一个字符互换位置,然后逐个向里互换。例如将‘abcde’变成‘edcba’。
1.首先,我们要知道字符串的长度,这样才能知道最后一位字符的下标(即字符串长度减一)。
![](https://img-blog.csdnimg.cn/20210726175440385.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzU0NzE3MTAx,size_16,color_FFFFFF,t_70)
2.定义len获得字符串的长度,定义变量tmp用来存放第一个字符,再把空出来的第一个位置放最后一个字符,因为是递归思想,所以不能前后直接交换,此时需将空出来的最后一个字符位置放'\0'。
3.此时,需要找到递归的限制条件(出口),只需要知道余下的字符串是否有两个字符,调用my_strlen函数,此时从字符串的第二个字符开始计算长度。判断是否满足出口条件,接着第二个字符调用reverse_string(),直到只剩下一个或者没有字符的时候,将最后一个字符位置放存第一个字符的tmp。
代码实现:
![](https://img-blog.csdnimg.cn/20210726182420582.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzU0NzE3MTAx,size_16,color_FFFFFF,t_70)
全部代码:
#include<stdio.h>
int my_strlen(char* str)
{
int count = 0;
while (*str != '\0')
{
count++;
str++;
}
return count;
}
void reverse_string(char* str)
{
int len = my_strlen(str);
char tmp = *str;//首字符
*str = str[len - 1];//尾字符
str[len-1]= '\0';
if (my_strlen(str + 1) >= 2)
reverse_string(str+1);
str[len - 1] = tmp;
}
int main()
{
char str[] = "abcde";
reverse_string(str);
printf("%s", str);
return 0;
}