【C语言经典例题!】逆序字符串
目录
一、题目要求
二、解题步骤
①递归解法
思路
完整代码
②循环解法
思路
完整代码
嗨大家好!
本篇博客中的这道例题,是我自己在一次考试中写错的一道题
这篇博客包含了这道题的几种解法,以及一些我自己对这道题的看法,希望能够帮到大家
一、题目要求
编写一个函数 reverse_string(char * string)
实现:将参数字符串中的字符反向排列,不是逆序打印。
要求:不能使用C函数库中的字符串操作函数。
比如:
char arr[] = "abcdef";
逆序之后数组的内容变成:fedcba
二、解题步骤
这道题分为两种实现方法:一是递归实现,二是循环实现
①递归解法
思路
对于字符串“abcdefg”,递归实现的大概原理: |
1. 交换a和g, |
2. 以递归的方式逆置源字符串的剩余部分,剩余部分可以看成一个有效的字符串,再以类似的方式逆置 |
完整代码
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;
}
②循环解法
思路
1. 给两个指针,left放在字符串左侧,right放在最后一个有效字符位置 |
2. 交换两个指针位置上的字符 |
3. left指针往后走,right指针往前走,只要两个指针没有相遇,继续2,两个指针相遇后,逆置结束 |
完整代码
void reverse_string(char* arr)
{char *left = arr;char *right = arr+strlen(arr)-1;while(left<right){char tmp = *left;*left = *right;*right = tmp;left++;right--;}
}
不难看出,循环写法理解起来比较容易,而递归写法虽然较难被想到,但整体会更简洁
对于刚入门的同学,多积累一种办法才是最重要的,学到后期再去考虑要用哪种更省内存、效率更高的写法
以上就是本篇博客的全部内容啦,如有不足之处,还请各位指出,期待能和各位一起进步!