详解strlen+模拟实现strlen

strlen -求字符串长度

size_t strlen(const char* str)

 

1,字符串以'\0'作为结束标志,strlen函数返回的是在字符串中'\0'前面出现的字符个数(不包含'\0')

2.参数指向的字符串必须要以'\0'结束

int main()

{

        char arr[] = { 'a', 'b', 'c' };

        int len = strlen(arr);

        printf("%d\n", len);//15

        return 0;

}

3.注意函数的返回值size_t是无符号的

size_t=unsigned int

int main()

{       3-6=-3 3.6两个无符号数相减得到的是无符号数 =3 hehe

        if (strlen("abc") - strlen("abcdef"))

        {

               printf("hehe\n");//hehe

        }

        else

        {

               printf("haha\n");

        }

        return 0;

}

模拟实现strlen的时候返回值写int还是unsigned int?

写int,因为求的字符串长度肯定是一个整数

写成unsigned int有歧义 比如(strlen("abc") - strlen("abcdef")=3

 

 

 

模拟实现strlen

1.计数器(创建了临时变量count)

int my_strlen(const char* str)

{

        int count = 0;

        assert(str != NULL);

        while (*str)//(*str != '\0')

        {

               count++;

               str++;

        }

        return count;

}

int main()

{

        int len = my_strlen("abc");

        printf("%d\n", len);

        return 0;

}

2.递归(不创建临时变量)

int my_strlen(const char* str)

{

        assert(str != NULL);

        if (*str != '\0')

        {

               return 1 + my_strlen(str + 1);

               //my_strlen("bit");

               //1+my_strlen("it");

               //1+1+my_strlen("t");

               //1+1+1+my_strlen("");

               //1+1+1+0

               //3

        }

        else

               return 0;

}

int main()

{

        int len = my_strlen("abc");

        printf("%d\n", len);

        return 0;

}

 

3.指针-指针

int my_strlen(const char* str)

{

        assert(str != NULL);

        char* start = str;

        char* end = str;

        while (*end!='\0')

        {

               end++;

        }

        return end - start;

}

int main()

{

        int len = my_strlen("abc");

        printf("%d\n", len);

        return 0;

}

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值