【C语言】字符串逆序(递归实现)

【C语言】字符串逆序(递归实现)_第1张图片

博客主页:Luo-Kuang-何

座右铭:一起走向人生巅峰的路上

学习进度:【C语言】

博客声明我将尽我所能,用心写好每一份博客,让更多小伙伴能够与我交流学习心得。

如有不足,请指正。学习就是在不断犯错并改正的过程!


前言:

这里我就简单讲解一下我做这题的一些思路和方法。


1.先上思维导图

1.1递归主体

思路:因为我想的是每次把最后面的字符放到最前面来,当时没想到2边同时交换往中间靠拢的方法,能力不够。回归正题,我把除第一个已经完成逆序的arr[0],后面都把字符往后移,会空出arr[1],这时我把用第三方arr1存储的arr[0]原来的值放入,就从arr[1]到最后一位形成一个新的排序,只是最后面那个字符已经逆序。这时我用新指针指向arr[1],就可以依次逆序一个字符,最终完成所以逆序。

过程有点复杂,且要递归次数相对较多,但确实是我第一次做这种题能想到的思路最简化了。 

【C语言】字符串逆序(递归实现)_第2张图片

这里我是把arr[0]放到第三方arr1里存放,等下要赋值给arr[1]

最后面字符赋值给第一个arr[0]。


【C语言】字符串逆序(递归实现)_第3张图片

这里可以看出,我通过交换后移,把 a b c d \n 顺序通过指针改成了 d a b c \n 

这时我把指针后移,指针就从指向arr[0]改成指向arr[1],依次递归下去,也依次逆序一个字符。

最后当指针指向\n时,说明没有字符需要逆序了,完成递归,终止。


2.代码实现

2.1主要展示函数代码

void reverse_string(char* string)
{
    char arr1 = 0;
    int i = 0;
    if (*string == '\n');                           //判断第1个字符是否为’\n',是则停止递归
 
    else
    {
       for (i = 0; *(string + i+1) != '\0'; i++);   //计算新指针到'\0'的长度是i+1

       arr1 = *string;                              //先把新指针指向第一个地址里的数提*string出来放到arr1里     
       *string = *(string + i);                     //把最后面的数*(string + i)放在指向的第一个地址*string里
 
       for (; i > 1; i--)                           //从新指针第二个数到第i+1依次往后移
       {
           *(string + i) = *(string + i - 1);
       }
 
       *(string + i) = arr1;                        //把arr1里数赋值给第二个数
      
       reverse_string((string + 1));                //否则把(string+1)地址给新string指针
    }
}

 这里我用if判断到终点没,注意我写的是if()这后面;表示如果成立我什么都不做。终止。

我用了一个for(也写了)语句计算出指针指向到\n的距离得出字符剩余数量i+1个

成功完成第一个逆序后,用for从第二个开始往后移,再把第二个存上原来第一个的字符。

最后指针后移。


 总结:

我的思路可能有点复杂,仅供各位参考,希望你们能想出更简单的方法实现。


结语:

各位小伙伴们,觉得有用就给波三连呗!如有错误,请指正,谢谢大家!如果大家有不同意见,请与我交流,一起进步

我们顶峰相见!!!️

【C语言】字符串逆序(递归实现)_第4张图片

你可能感兴趣的:(C语言功能技巧,c语言,经验分享,程序人生)