前言

其实这篇文章的根源是我在试卷上看到的一个题目,他的内容是这样的:

不调用库函数,不使用任何全局变量局部变量写出库函数strlen实现。

然后给出了如下代码:

int strlen(char* str){
if <code>
    return 0;
else
    return <code>
}

思路

根据题目,思考半天,发现这不就是用递归实现strlen吗,然后写出了下面这个版本:

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

提升

通过上面的递归版本,我在想,有没有更简洁的版本,能更优雅的实现这个功能。然后,我参考了一些网上的思路,写出了下面这个一句话版本:

int strlen(char *str) {
    return (*str==NULL)?0:strlen(++str)+1;
}

其他实现

循环计数法:

int strlen(const char *StrDest)
{
    int i=0;
    while((*StrDest++)!='\0')
        i++;//这个循环体意思是从字符串第一个字符起计数,只遇到字符串结束标志'\0’才停止计数
    return i;
}

指针相减法:

int strlen(char *s)
{
    char *p = s;
    while (*p != '\0')
        p++;
    return p - s;
}