【C语言初阶】使用指针求字符串长度(五个版本盘点总结)

在代码的题目中,我们经常会遇到需要自己手写函数,求字符串长度的情况,那么今天博主就带大家一起盘点五种求字符串长度的写法

版本一:判断累加法

逻辑:由于字符串的末位是\0,且\0不计入字符串长度,那么可以利用指针来逐个判断字符串的内容,不是\0就累加1,遇到\0就停止,最后返回累加的数值即可求出字符串长度。
代码示范:

//版本1 
int my_strlen (char *p)
{
    
    
	int count = 0;
	while (*p != '\0')//解引用p,判断是否为\0
	{
    
    
		count++;//累加
		p++;//指针指向下一位字符内容
	}
	return count;//返回累加的数值即为字符串长度
}

int main()
{
    
    
	char arr[] = "abcdefg";
	int len = my_strlen(arr);
	printf("字符串长度为:%d\n", len);

	return 0;
}

编译结果:
image.png

版本二:递归法

原理:和判断累加的原理一样,也是判断\0然后进行累加,只不过用了递归的方法,递归就需要在return上面做文章了,先递出去,不断地嵌套my_strlen函数,同时将p不断向前移动判断下一位;再归回来,把每次的移动都+1+1+1,这样也可以判断出字符串的长度。
代码示范:(主函数是一样的,在上面示范的有,故只展示自定义函数)

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

编译结果:
image.png

版本三:移动相减法

原理:先将p移动到字符串末位,然后减去第一位的地址,地址之差就是字符串的长度
代码示范:

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

编译结果:
image.png

版本四:移动相减法 · 改

原理:将循环的条件改为*p,因为如果到最后一位\0,就等于0,while循环直接结束,比版本三更简洁一些
代码示范:

int my_strlen(char* p)
{
    
    
	char* start = p;
	while (*p)
	{
    
    
		p++;
	}
	return p - start;
}

编译结果:
image.png

版本五:移动相减法 · 改 · 改

原理:将while的条件改为*p++,后面的运行语句置空,这样一来同样可以运行代码,但是由于最后一次while循环会多执行一次判断句,也就是p会++,所以需要在return返回的时候减去1,这样才能得到正确的代码结果。
代码示范:

int my_strlen(char* p)
{
    
    
	char* start = p;
	while (*p++);
	return p - start-1;
}

编译结果:
image.png

写在最后

如果本文对您有帮助,可不可以给我一个小小的点赞呀❤~您的支持是我最大的动力。

博主小白一枚,才疏学浅,难免有所纰漏,欢迎大家讨论和提出问题,博主一定第一时间改正。

谢谢观看嘿嘿(๑•̀ㅂ•́)و✧~!

猜你喜欢

转载自blog.csdn.net/weixin_70218204/article/details/132086808