实现strlen函数

今天我实验室同学面试回来,给我用QQ传来一到面试题如下,

int strlen(char * str)

       if(    )

              return  (    );

       else

              return   (    ) ;

接着就问我有思路没?呵呵,我一看说,这个题我以前做过,我说很简单啊!下面听听我的废话吧:在程序设计中,这是一个经典问题-----时间与空间,一般人完成这个题的思想是都需要借助一个变量,哈哈,这个题就没给变量,但是大家都忽略了C语言中的递归的巧妙用处!这个题足以表明程序设计一定具备灵活性,在低配置的机器上设计程序一定要关注空间,那当然高配置就可以考虑时间啦。说了这么多啦,看看答案吧!

标准写法:

int strlen(char * str)
{
    if (str==NULL || str[0] == '\0')
          return (0);
    else
          return (strlen((char *)(&str[0]+1))+1);
}

简略写法:

int strlen(char * str)
{
    if (str==NULL || *str == '\0')
          return (0);
    else
          return ((strlen(str+1))+1);
}

    在简略写法中,又可以将第二个return后的表达式改为((strlen(++str))+1),但是改成这样((strlen(str++))+1)就不行啦,原因留给读者,呵呵~

    此题,主要是考你的理论知识,但从设计程序的角度讲,本身不完美,如果给此函数传入一个NULL的话,程序会崩溃!所以嘛,程序至少得具备容错性和健壮性......

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值