编写一个函数 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; }
运行结果