strlen函数模拟实现

    学习了c语言我们知道strlen 函数接受一个 char 类型的指针作为参数,该指针指向一个以空字符 '\0' 结尾的字符串。函数会从这个指针开始,逐个字符地向后遍历,直到遇到空字符 '\0' 为止,然后返回从字符串开始到空字符之前的字符数量。

这是它的原型:

size_t strlen(const char *str);

其中,字符串以 '\0' 作为结束标志,strlen函数返回的是在字符串中 '\0' 前⾯出现的字符个数(不包 含 '\0' )。参数指向的字符串必须要以 '\0' 结束。注意函数的返回值为size_t,是⽆符号的。

然后我们来尝试下自己模拟实现一下strlen函数。

法一(计数器法)
size_t my_strlen(char* p)/*利用指针从字符串首元素地址开始历遍字符串*/
{
    int count = 0;
    while (*p != '\0')
    {
        count++;
        p++;
    }/*在读到\0之前,每读到一个字符,次数加一*/
    return count;/*最后次数即为字符串长度*/
}
int main()
{

    char arr[] = "abcdef";
    size_t t = my_strlen(arr);
    printf("%zd\n", t);
    return 0;
}

法二(指针-指针法)
size_t my_strlen(char* p)
{
    char* start = p;创建一个指针来表示字符串首元素地址
    while (*p != '\0')
    {
        p++;
    }让原指针历遍字符串,得到字符串最后一个元素地址
    return p - start;两指针相减即为字符串元素个数,即长度
}
int main()
{
    char arr[] = "abcdef";
    size_t t = my_strlen(arr);
    printf("%zd\n", t);
    return 0;
}

法三(递推法)
size_t my_strlen(char* p)
{
    if (*p != '\0')
        return 1 + my_strlen(p + 1);/*通过访问字符串每一个字符,只要该字符不为\0长度为一,再加上对剩下字符串的函数调用结果*/
    else
        return 0;
}

int main()
{
    char arr[100];
    scanf("%s", &arr);
    size_t t = my_strlen(arr);
    printf("%zd\n", t);
    return 0;
}

以上是一些可行的方法,希望能加强大家对strlen函数的理解。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值