在C语言中我们要获取字符串的长度,可以使用strlen 函数,strlen 函数计算字符串的长度时,直到空结束字符,但不包括空结束字符,因为strlen函数时不包含最后的结束字符的,因此一般使用strlen函数计算的字符串的长度会比使用sizeof计算的字符
一、strlen函数是什么
我们经常用到strlen这个函数求字符串长度,但是它是怎么实现的呢?接下来让给我用三种方法带你们看看它是如何实现?
首先我们先来了解一下strlen这个函数,strlen 是求字符串长度的函数,它的返回值是size_t,就是unsigned int。字符串以'\0'作为结束标志,strlen函数返回的值就是在字符串中'\0'的前面出现的个数(不包含'\0')。所以我们在想strlen 是怎么实现的就可以从这里入手,从第一个字符开始找起,找到'\0'结束,计算个数。
二、strlen的三种实现方法
1、第一种方法(直接)
size_t my_strlen( const char* str)//字符串是放在常量字符串中,不能被改变,所以这里最好用用const修饰一下下啦
{
assert(str != NULL);//p如果接收过来的是空指针,那么这里运行会崩溃的,所以这里用assert函数断言一下
int count = 0;//计数
while (*str != '\0')
{
count++;//当它的字符不等于'\0'时,计数加一
str++;//再往下一个字符找
}
return count;
}
2、第二种方法(递归)
size_t my_strlen(const char* str)//字符串是放在常量字符串中,不能被改变,所以这里最好用用const修饰一下下啦
{
assert(str != NULL);//p如果接收过来的是空指针,那么这里运行会崩溃的,所以这里用assert函数诊断一下
if (*str != '\0')
{
return 1+my_strlen(str+1);
}
else
{
return 0;
}
}
return 1+my_strlen(str+1);//这里意思是说当首字符不等于'\0'说明这个字符串至少有一个字符
举个例子:
若char[]="abc"
1+my_strlen("bc")
1+1+my_strlen("c")
1+1+1+my_strlen("")--------1+1+1+0(空字符串第一个字符就是'\0')
3、第三种方法(指针-指针)
两个指针相减,得到的是两个指针之间元素的个数。我们先用一个指针放首字符地址,然后再找到最后一个字符的地址,用最后一个字符地址减去第一个字符地址,就是他们之间元素个数。
size_t my_strlen(const char* str)//字符串是放在常量字符串中,不能被改变,所以这里最好用用const修饰一下下啦
{
assert(str != NULL);//p如果接收过来的是空指针,那么这里运行会崩溃的,所以这里用assert函数诊断一下
const char* start = str;//定义一个指针放字符串首字符的地址,因为*str接收的字符串为常量字符串,所以这里最好也用const修饰一下
while (*str != '\0')
{
str++;
}
return str - start;
}
四、小结
以上就是strlen 函数的三种实现方法,我平常在用这个函数时可能很少会去关心它是怎么实现的,直接用就完了,但是了解一个函数是怎么实现的对于理解是有好处的。
到此这篇关于C++中strlen函数的三种实现方法的文章就介绍到这了,更多相关C++ strlen内容请搜索编程学习网以前的文章希望大家以后多多支持编程学习网!
本文标题为:C++中strlen函数的三种实现方法


- C++ 数据结构超详细讲解顺序表 2023-03-25
- ubuntu下C/C++获取剩余内存 2023-09-18
- Easyx实现扫雷游戏 2023-02-06
- 我应该为我的项目使用相对包含路径,还是将包含目录放在包含路径上? 2022-10-30
- C语言详解float类型在内存中的存储方式 2023-03-27
- C语言手把手带你掌握带头双向循环链表 2023-04-03
- 详解C语言中sizeof如何在自定义函数中正常工作 2023-04-09
- C语言qsort()函数的使用方法详解 2023-04-26
- c++ const 成员函数,返回一个 const 指针.但是返回的指针是什么类型的 const? 2022-10-11
- Qt计时器使用方法详解 2023-05-30