✨博客主页: XIN-XIANG荣
✨系列专栏:【从0到1,C语言学习】
✨一句短话:你若盛开,蝴蝶自来!
✨博客说明:尽己所能,把每一篇博客写好,帮助自己熟悉所学知识,也希望自己的这些内容可以帮助到一些在学习路上的伙伴,文章中如果发现错误及不足之处,还望在评论区留言,我们一起交流进步!😊
前言
😽很简单的逆序字符串实现,记录一种不容易想到的递归思路!
实现要求:
将参数字符串中的字符反向排列,不是逆序打印。
比如:
char arr[ ] = “abcdef”;
逆序之后数组的内容变成:fedcba
思路1:
抓住递归的核心思想将事件大事化小,要将整个字符串逆序,可以先将字符串中的首字符和末字符交换,再将中间的字符串再逆置;
而中间的字符串可以再次用上面的思路递归,直到首尾符的中间再没有字符串;
要想将中间的内容再当成一个字符串进行递归,就需要在其后在其后放置一个\0,而因为要放置这个\0,首字符就无法放置在字符串末尾完成交换,此时可以将这个字符用一个中间变量存储起来,等到中间的字符串递归完成逆序后,再将存储起来的首字符放到末字符的位置。
#include<stdio.h>
#include<assert.h>
#include<string.h>
void reverse(char* str)
{
assert(str);
char tmp = *str;
int len = strlen(str);
*str = *(str + len - 1);
*(str+len - 1) = '\0';
if (my_strlen(str + 1) >= 2)
{
reverse(str + 1);
}
*(str + len - 1) = tmp;
}
int main()
{
char arr[] = "abcdefg";
reverse(arr);
printf("%s\n", arr);
return 0;
}
思路2:
实现一个递归函数将字符串俩俩交换即可。
#include<stdio.h>
#include<assert.h>
#include<string.h>
void reverse(char arr[], int left, int right)
{
assert(arr);
if (left < right)
{
char tmp = arr[left];
arr[left] = arr[right];
arr[right] = tmp;
reverse(arr, left + 1, right - 1);
}
}
int main()
{
char arr[] = "abcdefg";
int left = 0;
int right = strlen(arr)-1;
reverse(arr, left, right);
printf("%s\n", arr);
return 0;
}
结语
各位小伙伴,看到这里就是缘分嘛,希望我的这些内容可以给你带来那么一丝丝帮助,可以的话三连支持一下呗😁!!! 感谢每一位走到这里的小伙伴,我们可以一起学习交流,一起进步😉!!!加油🏃!!!