编写一个函数 reverse_string(char * string)(递归实现)
实现:将参数字符串中的字符反向排列,不是逆序打印。
先介绍函数递归的概念
简单来说就是,函数自己调用自己的过程,简称函数递归
实现函数递归,有两个条件
1,存在限制条件。
2,每次递归之后,越来越接近限制条件。
根据题目要求,可知通过函数 reverse_string(char * string),
先将整个字符串逆序,然后再打印
如果没有理解题目要求,可能会逆序一个字符就立马打印,这个思考方式还是有所欠缺的
接下来就来思考如何去实现这个函数
代码如下
#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;
}
运行结果