strlen函数的实现

 

我们知道,strlen函数是一个用于计算字符串中字符大小的库函数,那么今天我们就来用三种方法模拟实现strlen函数

首先,我们来了解一下strlen函数的细节知识:

aae47340641b4571b748cf5a53d1a5b4.png

看不懂洋文?没关系

我们一起拍照翻译

5801a29cfc514ee28a51ca92c34d743b.jpeg

 这段文字简单介绍了strlen函数的功能和测试用例,函数实现其实主要看参数与返回类型

也就是这一行:

d641fe8fd94243a8a6fe14118ac8d3d5.jpeg

该函数返回类型为size_t(毕竟计算字符个数嘛怎么可能出现负数)

参数类型为const  char*

根据这点可以把函数的框架先写出来

size_t my_strlen(const char* str)
{

}

下面就可以来模拟实现啦

方法一:循环

明确目标:写一个函数,函数功能为计算字符串中字符个数

1.定义一个字符数组

char arr[]="hello world";

2.将数组首元素地址传给函数my_strlen

size_t len=my_strlen(arr);

3.运用指针向后查找并计数,遇到 \0 即止

size_t my_strlen(const char* str)
{
   size_t count=0;
   while(*str!='\0')
{
   str++;
   count++;
}
   return count;
}

完整代码:

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

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

优化:加入assert断言确保指针的有效性

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

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

方法二:递归

在讲递归实现strlen前,我们先了解一下什么是递归

递归

递归,名表其意,先递后归,递归就是函数自己调用自己的过程

递归必要条件:

存在限制条件,递归调用后越来越接近这个限制条件

 知道这些简单的知识即可关于递归的更详细的介绍在另一篇文章:

 

下面为函数实现

思路:

1.使用if else语句判断字符是否为 \0

size_t  my_strlen(const char* str)
{
	if (*str == '\0')
	{
		
	}
	else

	{
		
	}
}

2.使用递归返回值(是\0,返回0,不是\0,再次调用函数(即递归))

size_t  my_strlen(const char* str)
{
	if (*str == '\0')
	{
		return 0;
	}
	else

	{
		return 1 + my_strlen(str + 1);
	}
}

完整代码:

#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[]=“hello world”;
	size_t b= my_strlen(arr);
	printf("%zd", b);
    return 0;
}

方法三:指针运算

在学习过了指针运算相关内容后,我们知道了,指针之差表示指针间的元素个数,我们也可以借助这条性质模拟实现strlen函数,(实现过程和方法一多有相似,在这里不再赘述)具体实现如下:

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

以上就是strlen函数模拟实现的全部内容

感谢阅读!(*'▽'*)♪

 

  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值