• 【C】逆序字符串(俩种递归思路)


    在这里插入图片描述
    博客主页: XIN-XIANG荣
    系列专栏:【从0到1,C语言学习】
    一句短话:你若盛开,蝴蝶自来!
    博客说明:尽己所能,把每一篇博客写好,帮助自己熟悉所学知识,也希望自己的这些内容可以帮助到一些在学习路上的伙伴,文章中如果发现错误及不足之处,还望在评论区留言,我们一起交流进步!😊

    前言

    😽很简单的逆序字符串实现,记录一种不容易想到的递归思路!

    实现要求:

    将参数字符串中的字符反向排列,不是逆序打印。

    比如:

    char arr[ ] = “abcdef”;

    逆序之后数组的内容变成:fedcba

    思路1:

    抓住递归的核心思想将事件大事化小,要将整个字符串逆序,可以先将字符串中的首字符和末字符交换,再将中间的字符串再逆置;

    而中间的字符串可以再次用上面的思路递归,直到首尾符的中间再没有字符串;

    img

    要想将中间的内容再当成一个字符串进行递归,就需要在其后在其后放置一个\0,而因为要放置这个\0,首字符就无法放置在字符串末尾完成交换,此时可以将这个字符用一个中间变量存储起来,等到中间的字符串递归完成逆序后,再将存储起来的首字符放到末字符的位置。

    img

    #include
    #include
    #include
    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;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27

    思路2:

    实现一个递归函数将字符串俩俩交换即可。

    img

    #include
    #include
    #include
    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;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26

    结语

    各位小伙伴,看到这里就是缘分嘛,希望我的这些内容可以给你带来那么一丝丝帮助,可以的话三连支持一下呗😁!!! 感谢每一位走到这里的小伙伴,我们可以一起学习交流,一起进步😉!!!加油🏃!!!

    img

  • 相关阅读:
    【vue项目部署CSS失效】VUE部署后css样式加载无效和失效多种情况解决方案
    web前端期末大作业:基于HTML+CSS+JS外卖服务平台10页 带购物车 (web课程设计与实现)
    jmeter做接口压力测试_jmeter接口性能测试
    字典树 (Trie)
    详解数仓的向量化执行引擎
    SpringBoot的error用全局异常去处理
    spidev的使用(SPI用户态API)
    通过PLC网关如何实现三菱FX3U的远程上下载程序?
    umi4 React项目使用icon集合
    kubernetes部署jenkins
  • 原文地址:https://blog.csdn.net/Trong_/article/details/126000538