【C语言 模拟实现strlen函数的三种方法】

C语言之模拟实现strlen函数

前言:
通过C语言字符串函数的知识,这篇将对strlen函数进行深入学习底层的知识,并模拟实现对应功能。

/知识点汇总/

1、介绍strlen函数

函数原型:size_t strlen( const char string );
函数功能:返回参数的字符串长度
头文件:<string.h>
使用注意事项
(1)、以双引号初始化括起来的字符串自动识别’\0’字符串结束标志位,如“abcdef”本质是“abcdef\0”
(2)、以数组大括号初始化字符元素时,需手动添加‘0’字符串结束标志位,如{‘a’,‘b’,‘c’,‘d’,‘e’,‘f’,‘\0’}
(3)、strlen函数的参数是char
类型,接收对象是地址;不是类型占内存的大小,不包括’\0’;strlen是不会计算’\0’之后的长度的。
示例代码如下

#include <stdio.h>
#include <string.h>
//使用strlen函数,需要调用头文件 ---- <string.h>
int main()
{
    
    
	char arr[] = "hello";
	printf("%d\n",strlen(arr));//计算字符串长度,不包括'\0'
	
    char arr2[] = {
    
    'a','b','c','d','e','f','\0'};
    printf("%d\n",strlen(arr));//计算字符串长度,不包括'\0'
	return 0;
}

2、模拟strlen函数的三种方法

2.1、计数器法模拟实现strlen函数

#include <stdio.h>
size_t my_strlen(char* str)
{
    
    
	size_t count = 0;
	while (*str++ != '\0')
	{
    
    
		count++;
	}
	return count;
}
int main()
{
    
    
	char arr[] = "abcdef";
	size_t len = my_strlen(arr);
	printf("%zd\n", len);
	return 0;
}

2.2、递归法模拟实现strlen函数

#include <stdio.h>
size_t my_strlen(const char* str)
{
    
    
	if (*str == '\0')
		return 0;
	else
		return 1 + my_strlen(str + 1);
}
int main()
{
    
    
	char arr[] = "abcdef";
	size_t len = my_strlen(arr);
	printf("%zd\n", len);
	return 0;
}

2.3、指针减指针法模拟实现strlen函数

#include <stdio.h>
size_t my_strlen(const char* str)
{
    
    
	char* ret = str;
	while (*str != '\0')
	{
    
    
		str++;
	}
	return str - ret;

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

3、结语

学习函数的最实用的方式就是用自己的逻辑简单实现一些类似的功能
半亩方糖一鉴开,天光云影共徘徊。
问渠哪得清如许?为有源头活水来。–朱熹(观书有感)

猜你喜欢

转载自blog.csdn.net/m0_69455439/article/details/133500335