库函数strlen的三种模拟实现方式

文章目录

  • 一、库函数strlen的认识
  • 二、库函数strlen的使用
  • 三、库函数strlen的三种模拟实现方式
    • 1、用计数器的方式实现
    • 2、用函数递归的方式
    • 3、指针-指针的方式


一、库函数strlen的认识

关于库函数strlen我们可以从以下链接中认识:库函数strlen是求字符串长度的函数
https://legacy.cplusplus.com/reference/cstring/strlen/?kw=strlen

size_t strlen ( const char * str )

注意
字符串以 ‘\0’ 作为结束标志,库函数strlen 返回的是在字符串中 ‘\0’ 前面出现的字符个数但是不包括’\0’,双引号(“”)末尾是隐藏着一个 '\0’的

参数指向的字符串必须要以 ‘\0’ 结束

函数的返回值是 size_t ,是无符号的

二、库函数strlen的使用

#include 
#include //使用库函数strlen需要的头文件
int main()
{
	char arr[] = "abcdef";
	int ret = strlen(arr);
	printf("%d\n", ret);
	return 0;
}

运行结果:
库函数strlen的三种模拟实现方式_第1张图片

#include 
#include 
int main()
{
	char arr[] = { 'a','b','c','d' };//没有字符'\0'
	int ret = strlen(arr);
	printf("%d\n", ret);
	return 0;
}

因为要读到’\0’才会停下来,但是程序中没有’\0’所以得到的是随机值
库函数strlen的三种模拟实现方式_第2张图片

int main()
{
	char arr1[] = "abcd";
	char arr2[] = "abcdef";
	if (strlen(arr1) - strlen(arr2) > 0)
		printf(">=\n");
	else
		printf("<\n");
	return 0;
}

因为库函数strlen的返回值是suze_t(无符号整型),所以是大于0的
库函数strlen的三种模拟实现方式_第3张图片

三、库函数strlen的三种模拟实现方式

1、用计数器的方式实现

#include 
int my_strlen(const char* str)
{
	int count = 0;//设置计数器
	while (*str!='\0')//对指针进行解引用找到那个值,若那个值不等于'\0'则向后依次找
	{                 //直到找到'\0',结束循环
		count++;//每次找到一个值,计算器++
		str++;
	}
	return count;//循环结束返回计数器的值
}
int main()
{
	char str[] = "abcdef";
	int len = my_strlen(str);
	printf("%d\n", len);
	return 0;
}

库函数strlen的三种模拟实现方式_第4张图片

2、用函数递归的方式

#include 
int my_strlen(const char* str)//每次递归都会使指向首元素的指针加1,直到遇到'\0'递归结束
{                             
	if (*str == '\0')
		return 0;
	else
		return 1 + my_strlen(str + 1);//递归每进行一次返回值就加1
}
int main()
{
	char str[] = "abcdef";
	int len = my_strlen(str);
	printf("%d\n", len);
	return 0;
}

库函数strlen的三种模拟实现方式_第5张图片

3、指针-指针的方式

#include 
int my_strlen(char* s)
{
	char* p = s;//把函数传来的值赋给指针p
	while (*p != '\0')//对指针p进行解引用,如果不为'\0',则依次向后找,直到找到'\0'结束循环
	{
		p++;
	}
	return p - s;//对指针相加减计算的是中间元素的个数
}
int main()
{
	char str[] = "abcdef";
	int len = my_strlen(str);
	printf("%d\n", len);
	return 0;
}

库函数strlen的三种模拟实现方式_第6张图片

你可能感兴趣的:(c语言,开发语言)