三种方式实现strlen函数

来源:互联网 发布:免费已备案景安域名 编辑:程序博客网 时间:2024/05/16 07:31

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

int strlen(char * str)

       if(   

              return  (    );

       else

              return     ) ;

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

标准写法:

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

简略写法:

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

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

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

    下面是我从三个角度对strlen函数进行设计编码,在VC6.0下,编译、运行通过。

三种方式实现strlen函数

0 0
原创粉丝点击