C语言strlen函数实现读取字符串长度详解

 更新时间:2022年04月13日 15:28:50   作者:初学C语言者  
这篇文章主要介绍了用C语言的strlen函数来实现读取字符串长度的过程,strlen所作的是一个计数器的工作,它从内存的某个位置开始扫描,直到碰到第一个字符串结束符'\0'为止

前言

读取字符串的长度,使用函数 strlen。这里我们写一个函数,来读取字符串的长度,本文内容主要包括:

  • 使用strlen
  • 使用指针:是常规的方法,但是要创建变量
  • 指针改进:不需要创建变量,要求高,不易掌握
  • 使用递归:不需要创建变量,要求高,不易掌握
  • 介绍常量指针—— const char* str

1、函数strlen

int main()
{
	char arr[] = "abcd";
	int len = strlen(arr);
	printf("%d\n", len);
	return 0;
}

2、使用指针

字符串以字符 ‘\0’ 结尾,需要创建变量

int my_strlen(char* str)
{
	int count = 0;//统计字符的个数,需要创建变量
	while (*str != '\0')
	{
		count++;
		str++;
	}
	return count;
}
int main()
{
	char arr[] = "abcd";
	//char* str = arr;
	int len = my_strlen(arr);
	printf("%d\n", len);
	return 0;
}

3、指针改进

使用指针,不创建变量,不需要创建变量,面试题级别,要求高,不易掌握

int my_strlen(char* str)
{
	char* p = str;//记录首元素地址的位置
	while (*p != '\0')
	{
		p++;
	}
	return p - str;//尾地址-首地址,就是字符串的长度
}

4、使用递归

递归函数,不需要创建变量,以大化小,进行分解,面试题级别,要求高,不易掌握

my_strlen("abcdef")
1+my_strlen("bcdef")
1+1+my_strlen("cdef")
1+1+1+ my_strlen("def")
1+1+1+1+ my_strlen("ef")
1 + 1 + 1 + 1 +1+my_strlen("f")
1 + 1 + 1 + 1 + 1 + 1+ my_strlen("")
1 + 1 + 1 + 1 + 1 + 1 + 0 = 6

int my_strlen(char* str)
{//不需要创建变量
	if (*str != '\0')
		return 1 + my_strlen(str+1);//递归
	else
		return 0;
}

5、my_strlen函数的参数改进—常量指针

定义常量指针,const 对 *str 的内容进行限制,字符串的内容在传参时不会发生改变,将上面的自定义函数,都换成下面的代码:

int my_strlen(const char* str)//常量指针
{
}

总结

写一个函数,来读取字符串的长度,推荐掌握指针的写法。如果后面还有别的函数的写法,再进行更新。

到此这篇关于C语言strlen函数实现读取字符串长度详解的文章就介绍到这了,更多相关C语言 字符串长度内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • C语言实现经典排序算法的示例代码

    C语言实现经典排序算法的示例代码

    这篇文章主要为大家详细介绍了如何利用C语言实现经典排序算法中的冒泡排序、选择排序、插入排序、希尔排序,文中的示例代码讲解详细,需要的可以参考一下
    2022-08-08
  • C++11 condition_variable条件变量的用法说明

    C++11 condition_variable条件变量的用法说明

    这篇文章主要介绍了C++11 condition_variable条件变量的用法说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-07-07
  • C++单例模式的懒汉模式和饿汉模式详解

    C++单例模式的懒汉模式和饿汉模式详解

    这篇文章主要为大家详细介绍了C++懒汉模式和饿汉模式,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-03-03
  • C语言进阶教程之字符函数和字符串函数

    C语言进阶教程之字符函数和字符串函数

    C语言中对字符和字符串的处理很是频繁,但是C语言本身是没有字符串类型的,字符串通常放在常量字符串中或者字符数组中,下面这篇文章主要给大家介绍了关于C语言进阶教程之字符函数和字符串函数的相关资料,需要的朋友可以参考下
    2022-11-11
  • C++ Boost Bimap示例详细讲解

    C++ Boost Bimap示例详细讲解

    Boost是为C++语言标准库提供扩展的一些C++程序库的总称。Boost库是一个可移植、提供源代码的C++库,作为标准库的后备,是C++标准化进程的开发引擎之一,是为C++语言标准库提供扩展的一些C++程序库的总称
    2022-11-11
  • C语言排序算法之桶排序解析

    C语言排序算法之桶排序解析

    这篇文章主要介绍了C语言排序算法之桶排序解析,桶排序Bucket sort或所谓的箱排序,是一个排序算法,工作的原理是将数组分到有限数量的桶里,每个桶再分别排序,大部分是在分桶时,即插入时就排序了,需要的朋友可以参考下
    2023-10-10
  • C语言创建数组实现函数init,empty,reverse

    C语言创建数组实现函数init,empty,reverse

    这篇文章主要介绍了C语言创建数组实现函数init,empty,reverse,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-07-07
  • C++ 十进制转换为二进制的实例代码

    C++ 十进制转换为二进制的实例代码

    这篇文章介绍了C++ 十进制转换为二进制的实例代码,有需要的朋友可以参考一下
    2013-10-10
  • 一篇文章让你轻松理解C++中vector和list区别

    一篇文章让你轻松理解C++中vector和list区别

    对于学c语言的同学来说,vector和list这两个东西经常会搞错,下面这篇文章主要给大家介绍了关于C++中vector和list区别的相关资料,需要的朋友可以参考下
    2022-01-01
  • 基于C语言实现推箱子游戏

    基于C语言实现推箱子游戏

    这篇文章主要为大家详细介绍了基于C语言实现推箱子游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-02-02

最新评论