strlen函数的几种实现方法

       strlen函数是用来计算字符串长度的一个函数,其包含在string.h头文件中。

       例如:假设一个字符串为“abcdef”,在经过strlen函数计算后应该为6。

#include <stdio.h>
#include <string.h>
int main()
{
	int ret = 0;
	char arr[] = "abcdef";
    	ret = strlen(arr);
	printf("%d\n",ret);
	return 0;
}


      那么,这个函数是具体如何实现的呢?我们可不可以编写一个具有计算字符串长度的函数呢?

方式1:

     使用while循环逐一判断,再用创建一个变量count来计数,直到遇到"\0"退出循环。

int my_strlen(const char* arr)   //不需要改变字符串的值,故用const修饰,提高函数安全性
{
	int count = 0;
	while(*arr)
	{
		count++;
		arr++;
	}
	return count;
}
方式2:
     运用递归的思想,从前向后逐字符判断,若此字符不为“\0”,则返回下一个递归函数,直到遇到字符“\0”结束递归。
int my_strlen(const char* arr)
{
	if(*arr)
		return 0;
	else
		return 1+my_strlen(arr+1);
}

方式3:
     运用指针的减法来判断(注:减法运算的值是两个指针在内存中的距离,以数组元素的长度为单位,例如指针p1指向arr[i],指针p2指向arr[j],则p2-p1就是j-i的值,即也就是间隔之间的元素个数。)

int my_strlen(const char* arr)
{
	char *p = arr;  //定义一个指针存放字符串首元素的地址
	while(*p != '\0')
		p++;
	return p-arr;
}

最后,我们也可以看看在库函数中它是如何实现的(用的平台为VS2008)

size_t __cdecl strlen (
        const char * str
        )
{
        const char *eos = str;

        while( *eos++ ) ;

        return( eos - str - 1 );
}
可以看出,它用的是指针的减法运算来计算字符串长度,由于它在循环中使用自增,到最后为“\0”时,多加1次,因此最后返回时减去1。



       strlen函数是用来计算字符串长度的一个函数,其包含在string.h头文件中。

       例如:假设一个字符串为“abcdef”,在经过strlen函数计算后应该为6。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值