C语言初识——递归进行字符串逆序以及递归求字符串长度

问题描述:

       编写一个函数Reverse(char *arr)(递归实现)

       实现:将参数字符串中的字符反向排列。

       要求:不能使用处C库函数中的字符串操作函数。

递归求字符串长度

        递归如何模仿实现strlen()函数呢?

int Strlen(char *arr)
{
    if(*arr=='\0')     //指针数组加及往后退几位,不加不减就是首位字符
    {
        return 0;    //递归要有出口
    }
    else
    {
        return 1+Strlen(arr+1);//每次字符串向后一位接近出口向后几次加几次,直到'\0'处
    }
}

 递归求字符串逆序

void Reverse (char *arr)
{
    int ret = Strlen(arr);//运用刚才写的函数
    if(ret<=1)
    {
        return;//void 中用return 是类似于循环语句中的break,直接结束函数。
    }
    else
    {
        char temp = arr[0];
        arr[0] = arr[ret-1];
        arr[ret-1] = '\0';//目的是让这个字符串对称的那个数都一一对应
//因为下一条语句会让字符串往后推一位,例如此时arr指的是arr[0]的地址
//那么执行完下一个语句后,arr[0]的地址就是原来的arr[1];
        Reverse(arr+1);    //
        arr[ret-1] = temp;//最后再把对称的那个数填充上去
    }

}

比如上图数组,将*arr即a[0]的值先存放到temp中,然后arr[ret-1]即e的值赋给a[0],然后令arr[ret-1]的值为'\0',下一次调用Reverse函数时,数组就变成这样:

 

 b对应d,arr[ret-1]就是d了。

最后就剩个C了,此时字符串长度小于等于1,次函数结束,函数的逆序完成。

 最终代码

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值