string.h库函数的实现---strlen

strlen的实现
作用:求字符串的长度,给定字符串后调用strlen函数可求出给定字符串的长度

实现机制
1.在函数中定义一个临时变量,用于记录字符串的长度,当指针向后走一步,如果是非‘\0’则加1,最终返回临时变量则为长度。
2.不定义临时变量实现,用递归的思路,求一个字符串长度,例如:abcdef的长度就可以表示为1+bcdef的长度,bcdef的长度又可以表示为1+cdef的长度,依次分解为子问题直至遇到‘\0’就可以求得字符串的长度。
3.指针相减得到字符串的长度。刚开始时,两个指针都指向字符串的首元素,让一个指针向后移动,直至遇到’\0’,然后用后指针减去前指针即为字符串的长度。
非递归参考函数

int my_strlen(const char* str)
{
	assert(str != NULL);	//断言判定不允许传空指针
	int ret = 0;
	while (*str != '\0')
	{
		++ret;
		++str;
	}
	return ret;
}

递归参考函数

//递归实现
int my_strlen(const char* str)
{
	assert(str != NULL);
	if (*str == '\0')
	{
		return 0;
	}
	return 1 + my_strlen(str+1);
}

指针相减参考函数

//指针相减实现
int my_strlen(const char* str)
{
	assert(str != NULL);
	char* dest = str;
	while (*dest != '\0')
	{
		dest++;
	}
	return dest - str;
}

参考代码如下

#include <stdio.h>
#include <assert.h>
//
//指针相减实现

int my_strlen3(const char* str)
{
	assert(str != NULL);
	const char* dest = str;
	while (*dest != '\0')
	{
		dest++;
	}
	return dest - str;
}

//递归实现
int my_strlen2(const char* str)
{
	assert(str != NULL);
	if (*str == '\0')
	{
		return 0;
	}
	return 1 + my_strlen2(str+1);
}

//非递归
int my_strlen1(const char* str)
{
	assert(str != NULL);	//断言判定不允许传空指针
	int ret = 0;
	while (*str != '\0')
	{
		++ret;
		++str;
	}
	return ret;
}

int main()
{
	char arr[100] = "abcdef";
	printf("%d\n", my_strlen1(arr));
	printf("%d\n", my_strlen2(arr));
	printf("%d\n", my_strlen3(arr));
	return 0;
}

运行结果展示
在这里插入图片描述

其他字符串操作函数的实现

------strcpy的实现
------strcat的实现
------strstr的实现
------strchr的实现
------strcmp的实现
------memcpy的实现

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值