【C语言】模拟实现strlen

strlen是非常常用的字符串函数

目录

介绍:

我们可得这个函数是求在字符串开始与'\0'之间的字符串长度

代码示例:

c 复制代码
#include <stdio.h>
int main()
{
	const char* str1 = "abcdef";
	const char* str2 = "bbb";
	printf("%d\n", strlen(str1));
	printf("%d\n", strlen(str2));
	if (strlen(str2) - strlen(str1) > 0)
	{
		printf("str2>str1\n");
	}
	else
	{
		printf("srt1>str2\n");
	}
	return 0;
}

结果:

解释:

这里的6和3容易理解,那么str2>str1怎么解释?

因为strlen返回值类型为size_t类型,为无符号整形 ,

即相减的结果虽然为一个负数,但负数的无符号整形显然是巨大的正数

故大于
:
1.字符串以 '\0' 作为结束标志,strlen函数返回的是在字符串中 '\0' 前面出现的字符个数(不包含 '\0' )。
:
2.参数指向的字符串必须要以 '\0' 结束。
:
3.注意函数的返回值为size_t,是无符号的( 易错 )

模拟实现:

实现strlen有多种方法

计数器

思路:

通过设计计数器count进行计数,只要当前字符不为0就+1

代码实现:

c 复制代码
int my_strlen(const char* str)
{
	assert(str);
	int count = 0;
	while (*str)
	{
		count++;
		str++;
	}
	return count;
}

int main()
{
	char str[] = "abcdef";
	int ret =my_strlen(str);
	printf("%d ", ret);
	return 0;
}

递归

思路:

记住递归的两个要素

1.有一个临界值

2.越来越接近临界值

假设有一个字符串abc

那么我们每进行一次递归

字符串就少一个元素,当遇到0时停止递归

c 复制代码
abc//进入函数时的字符串
1+bc//第一次递归
  1+c//..
    1//最后一次

代码实现:

c 复制代码
int my_strlen(const char* str)
{
	if (*str != 0)
		return 1 + my_strlen(str + 1);
	else
		return 0;
}

int main()
{
	char str[] = "abcdef";
	int ret =my_strlen(str);
	printf("%d ", ret);
	return 0;
}

指针-指针

首先要知道指针-指针得到的是中间的元素个数,并非别的元素
思路:

记录开始的地址

利用循环得到\0的地址

两者相减

代码实现:

c 复制代码
int my_strlen(const char* str)
{
	char* start = str;
	while (*str)
	{
		str++;
	}
	return str - start;
}

int main()
{
	char str[] = "abcdef";
	int ret = my_strlen(str);
	printf("%d ", ret);
	return 0;
}

欢迎纠错与讨论

相关推荐
沐晓时光7 小时前
C语言入门,内存函数知识讲解
c语言·开发语言
Zwawa10 小时前
C语言函数指针与宏实战:从回调、表驱动菜单到X-Macro,讲透嵌入式代码解耦
c语言·单片机·嵌入式
David猪大卫13 小时前
【C++修炼】map 和 set 的使用
c语言·开发语言·数据结构·c++·经验分享·笔记·学习
HPtiger13 小时前
C++ 入门笔记:从 C 到 C++ 的核心过渡(命名空间、输入输出、缺省参数、重载、引用、内联)
c语言·c++·学习
fengci.14 小时前
CTF2MISC中等部分
开发语言·前端·学习
xys_67816 小时前
JavaEE通关手册:初识Java
java·开发语言
安妮细水长流17 小时前
ad7124
c语言·单片机
ShineWinsu17 小时前
对于Qt:QTableWidget常见属性以及QTableWidgetItem类的解析
开发语言·c++·qt·gui·客户端·表格·qtablewidget
ShineWinsu18 小时前
对于Qt:QListWidget常见属性以及QListWidgetItem类的解析
开发语言·c++·qt·客户端·列表·qlistwidget·qlistwidgetitem
吴名氏.18 小时前
Java转AI Agent教程(第十二周)检索与切分
java·开发语言·人工智能·ai·ai agent