13. 《C语言》——【strlen函数的使用和模拟实现】

06-11 1350阅读

文章目录

  • 前言
  • strlen函数
    • strlen函数的使用
    • strlen函数的3种方法实现
      • 方法1
      • 方法2
      • 方法3
      • 总结

        13. 《C语言》——【strlen函数的使用和模拟实现】


        前言

        	各位老板好~ , 今天我们讲解strlen函数如何去使用以及如何去模拟实现strlen函数。希望各位老板能够给一个点赞和一个大大的关注,感谢各位老板!
        

        strlen函数


        strlen函数的使用

        在库函数中,strlen函数的功能是求出字符串的长度,统计的是字符串中\0之前的字符个数。

        函数原型如下:

        size_t strlen ( const char * str );
        

        使用strlen函数,需要包含头文件:

        #include
        

        使用代码如下:

        //strlen函数的使用
        #include
        #include
        int main()
        {
        	char arr[] = "zhangsan"; 
        	size_t len = strlen(arr); 
        	printf("%zd\n", len); 
        	return 0; 
        }
        

        运行结果:

        13. 《C语言》——【strlen函数的使用和模拟实现】

        分析:

        1. 值得注意的是strlen函数的返回值是size_t,也就是返回无符号整型,那么对应的占位符使用%zd。
        2. const char * str , 接收的是数组首元素的地址。
        3. 使用库函数,不要忘记包含对应的头文件。

        strlen函数的3种方法实现


        方法1

        方法1,我们使用计数器方法,那么大概思路就是,我有一个指针变量p,它指向的是这个数组,指针变量p++,只要p指向的不是’\0’,那么我的计数器count++。


        代码如下:

        //strlen函数的模拟实现 
        //方法1(计数器) 
        #include
        #include
        size_t my_strlen(const char* p)
        {
        	int count = 0; //计数器
        	assert(p != NULL); 
        	while (*p != '\0')//只要*p不等于'\0' , count就++
        	{
        		count++; 
        		p++; 
        	}
        	return count; 
        }
        int main()
        {
        	char arr[] = "zhangsan"; 
        	size_t len = my_strlen(arr); 
        	printf("%zd\n", len); 
        	return 0; 
        }
        

        运行结果:

        13. 《C语言》——【strlen函数的使用和模拟实现】

        分析:

        1. 为了完成strlen函数的模拟,我们自己写了一个函数:my_strlen。首先,函数进行传参(数组传参传的是数组首元素的地址)。其次,创建变量len来接收值。最后打印该值。
        2. 进入函数里面,我们该如何去写? 既然传递的是地址,那么我们需要使用指针来接收,为了不想让值被修改,我们可以加上const的修饰指针。返回类型我们就按照strlen函数的一样就可以。
        3. 然后,既然是使用计数器方法,我们就创建一个计数器count。在其之前,我们可以使用assert函数断言一下,判断一下我们的指针是不是空指针,如果是会报出错误,使用assert,需要包含对应的头文件。
        4. 我们需要遍历数组元素,如果指针*p不是’\0’,那么计数器count++,最终,返回count就可以;如果是’\0’,直接结束。

        方法2

        方法二,我们使用指针-指针的方法。也就是让指针末-指针首就可以得到中间值,指针-指针必须是在同一内存空间。


        代码如下:

        //strlen函数的模拟实现 
        //方法2(指针-指针) 
        #include 
        #include
        size_t my_strlen(const char* p)
        {
        	assert(p != NULL); 
        	const char* start = p; 
        	const char* end = p;   
        	while (*end != '\0')
        	{
        		end++; 
        	}
        	return end - start; 
        }
        int main()
        {
        	char arr[] = "abcdefg";  
        	size_t len = my_strlen(arr);  
        	printf("%zd\n", len);
        	return 0; 
        }
        

        运行结果:

        13. 《C语言》——【strlen函数的使用和模拟实现】

        分析:

        1. 创建一个字符数组,值为"abcdefg" , 随后,创建一个函数叫my_strlen,对它进行传参。创建len来接收my_strlen的值,最后打印该值。
        2. 进入函数内部,因为my_strlen传递的是数组首元素的地址,我们需要使用指针p来接收,并且使用const修饰指针p。my_strlen的返回类型是size_t。
        3. assert断言一下指针变量是不是为空,使用assert需要包含头文件。创建2个新的指针变量,分别为start和end,把p赋值给这2个指针变量。随后进行遍历,如果不是’\0’,end++。最后,end - start 也就是指针-指针,并且返回。

        方法3

        我们使用递归来解决,那么如何去使用递归?我们知道,使用递归需要遵循2个前提。

        1. 递归存在限制条件,当满足这个限制条件时,递归就不再继续。
        2. 每一次递归,都会接近限制条件。

        当我们了解了这2个前提,那么我们就可以使用递归了。


        代码如下:

        //strlen函数的模拟实现 
        //方法3(递归) 
        #include
        #include
        size_t my_strlen(const char* p)
        {
        	assert(p != NULL); 
        	if (*p != '\0')
        		return 1 + my_strlen(p + 1);
        	else
        		return 0;
        }
        int main()
        {
        	char arr[] = "abcdefg"; 
        	size_t len = my_strlen(arr); 
        	printf("%zd\n", len); 
        	return 0; 
        }
        

        运行结果:

        13. 《C语言》——【strlen函数的使用和模拟实现】

        分析:

        1. 创建字符数组,并且进行初始化;写一个函数my_strlen,创建一个变量len,接收值。最后,打印值。
        2. 进入函数内部,既然传递的是数组首元素的地址,我们就创建指针变量p来接收,我们不想让值进行改变,使用const修饰指针变量。my_strlen函数的返回类型与strlen函数一致,为size_t 。
        3. 使用assert断言一下,确保p不是空指针。使用assert需要保证包含头文件。
        4. 在前面,我们说了递归的使用方法,需要有一个限制条件,那么如果p不等于’\0’,就进行递归,否则,else 返回0。

        总结

        1. 以上就是本文章的内容,我们使用了3个方法来模拟strlen函数。
        2. 感谢大家的阅读,希望能够给一个大大的关注~

          13. 《C语言》——【strlen函数的使用和模拟实现】

VPS购买请点击我

文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。

目录[+]