栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

c语言strlen的模拟实现

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

c语言strlen的模拟实现

在c语言中strlen是求字符串长度的函数,strlen在求长度的过程中寻找的是/0(字符长结束标志)

那么在不使用库函数下我们该如何实现呢

下面我们讲第一种方法,也是最常见的方法

首先我们创建一个char 类型的数组,数组的内容初始化成abc

然后写一个自己的函数这里的函数名可以自定义这里我写的是print

我们在传参的时候传的是数组,那么我们在接受的时候也可以写成数组的形式接收,还可以写成指针的方式接收, 因为数组在传参的时候传的是首元素的地址,所以这里写成指针的形式哦

当我们进入到print函数内部时 我们首先创建一个临时变量,叫count 也就是统计的

紧接着就是while循环,这时指针p指向的是数组的首元素,那么我们判断当指针p什么时候指向的元素是/0时 那么我们就停下循环,当指针每指向一个元素且不是/0时,那么我们就给我们的count++,然后指针p也++如此循环下去当指针p指向/0是我们的count里存放的数字也就是字符串的长度

int print(char* p)//第一种方法用函数来实现
{
	int count = 0;
	while (*p != '')
	{
		count++;
		p++;
	}
	return count;
}


int main()
{
	int len = 0;
	char ch[] = "abc" ;
	len=print(ch);
	printf("字符串的长度是%dn", len);
	return 0;
}

第二种发法

指针-指针

我们说指针-指针的方法来实现时我们要先了解指向的类型对指针进行操作时有什么影响

指针类型决定了指针进行解应用操作的时候能够访问空间的大小。
int*p可以访问4个字节
short*可以访问2个字节
char*p可以访问1个字节
double*p可以访问8个字节

指针类型决定了:指针走一步走多远(指针的步长)
int*p;p+1 --> 4
char'p; p+1-->1 
double* p; p+1-->8

这里我们进入print函数首先我们可以看到有两个char*类型的指针变量

是个方法的实现逻辑是,str指针指向数组的第一个元素,end指针指向数组的最后一个元素

然后相减得到的就是字符长的长度

分别是str 和  end   此时两个指针指向的都是p也就是数组的首元素的地址

进入while循环当end指针指向的元素不是/0是我们就++如果是/0那么此时end指针指向的位置就是数组的最后一个元素所在的位置,并且跳出循环,在直接返回得到的就是字符串的长度

int print(char* p)//第二种方法指针减指针
{
	char* str = p;
	char* end = p;
	while (*end != '')
	{
		end++;
	}
	return end - str;
}


int main()
{
	int len = 0;
	char ch[] = "bit" ;
	len=print(ch);
	printf("字符串的长度是%dn", len);
	return 0;
}

以上就是我对这两种方法的看法,欢迎大神补充,当然还有一种递归的方法就放到下次在讲吧

这里要注意一下,我们在初始值数组的时候不要写成以下这种形式

如果这样写的话就不能正常的求字符长的长度

因为这样子初始化的话,我们知道strlen在求字符串长度的时候找的是/0如果这样初始化那么在我们从受元素向后找的时候就会发现找不到/o,就会在内存中一直向后找。此时得到值不是字符串的长度而是随机值

int main()
{
char ch[]={'a','b','c'};
return 0;
}

如果写成整个方式的话,用双引号括起来的字符串我们叫常量字符串,一般/0都会自动隐藏在字符串的最后面,此时这个数组在内存中存储的东西是 a,b.c./0

因为/0默认是隐藏不显示的,而上面的写法里面就没有/0那也就是为什么上面那种方式最后求出来的结果是随机值的原因

int main()
{
char ch[]="abc";
return 0;
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/847758.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号