服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - C/C++ - C++中strlen函数的三种实现方法

C++中strlen函数的三种实现方法

2022-11-24 11:45菜菜不恰菜 C/C++

在C语言中我们要获取字符串的长度,可以使用strlen 函数,strlen 函数计算字符串的长度时,直到空结束字符,但不包括空结束字符,因为strlen函数时不包含最后的结束字符的,因此一般使用strlen函数计算的字符串的长度会比使用s

一、strlen函数是什么

我们经常用到strlen这个函数求字符串长度,但是它是怎么实现的呢?接下来让给我用三种方法带你们看看它是如何实现?

首先我们先来了解一下strlen这个函数,strlen 是求字符串长度的函数,它的返回值是size_t,就是unsigned int。字符串以'\0'作为结束标志,strlen函数返回的值就是在字符串中'\0'的前面出现的个数(不包含'\0')。所以我们在想strlen 是怎么实现的就可以从这里入手,从第一个字符开始找起,找到'\0'结束,计算个数。

二、strlen的三种实现方法

1、第一种方法(直接)

?
1
2
3
4
5
6
7
8
9
10
11
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、第二种方法(递归)

?
1
2
3
4
5
6
7
8
9
10
11
12
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、第三种方法(指针-指针)

两个指针相减,得到的是两个指针之间元素的个数。我们先用一个指针放首字符地址,然后再找到最后一个字符的地址,用最后一个字符地址减去第一个字符地址,就是他们之间元素个数。

?
1
2
3
4
5
6
7
8
9
10
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内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://blog.csdn.net/m0_65673419/article/details/124068429

延伸 · 阅读

精彩推荐
  • C/C++OpenCV实现图像角点检测

    OpenCV实现图像角点检测

    这篇文章主要为大家详细介绍了OpenCV实现图像角点检测,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    lindamtd11582021-07-17
  • C/C++使用C/C++读写.mat文件的方法详解

    使用C/C++读写.mat文件的方法详解

    这篇文章主要为大家详细介绍了使用C/C++读写.mat文件的方法,使用数据库,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参...

    FILWY_M11652022-10-13
  • C/C++C与C++之间相互调用实例方法讲解

    C与C++之间相互调用实例方法讲解

    这篇文章主要介绍了C与C++之间相互调用的实例方法,大家参考使用吧 ...

    C语言教程网3722021-01-10
  • C/C++C语言合并两个带头节点升序排列链表

    C语言合并两个带头节点升序排列链表

    这篇文章主要为大家详细介绍了C语言合并两个带头节点升序排列链表的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    Judy_c11232021-07-24
  • C/C++浅谈socket TCP编程中connect的一些坑

    浅谈socket TCP编程中connect的一些坑

    下面小编就为大家带来一篇浅谈socket TCP编程中connect的一些坑。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...

    99re3772021-04-22
  • C/C++C语言 表、栈和队列详解及实例代码

    C语言 表、栈和队列详解及实例代码

    这篇文章主要介绍了C语言 表、栈和队列详解及实例代码的相关资料,需要的朋友可以参考下...

    C语言中文网7912021-04-29
  • C/C++C++深复制和浅复制讲解

    C++深复制和浅复制讲解

    这篇文章主要介绍了C++深复制和浅复制讲解,C++中深复制和浅复制最大的区别在“类包含指针类型的数据成员”时,下面感兴趣的小伙伴和小编一起进入文...

    机器学习入坑者3752022-10-17
  • C/C++C语言调试手段:锁定错误的实现方法

    C语言调试手段:锁定错误的实现方法

    本篇文章是对在C语言调试中,锁定错误的方法进行了详细的分析介绍,需要的朋友参考下...

    C语言中文网2992020-12-08