服务器之家:专注于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-08 13:57初学C语言者 C/C++

这篇文章主要介绍了用C语言的strlen函数来实现读取字符串长度的过程,strlen所作的是一个计数器的工作,它从内存的某个位置开始扫描,直到碰到第一个字符串结束符'\0'为止

前言

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

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

1、函数strlen

?
1
2
3
4
5
6
7
int main()
{
    char arr[] = "abcd";
    int len = strlen(arr);
    printf("%d\n", len);
    return 0;
}

2、使用指针

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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、指针改进

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

?
1
2
3
4
5
6
7
8
9
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

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

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

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

?
1
2
3
int my_strlen(const char* str)//常量指针
{
}

总结

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

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

原文链接:https://blog.csdn.net/taibudong1991/article/details/124006994?spm=1001.2014.3001.5502

延伸 · 阅读

精彩推荐
  • C/C++关于STL的erase()陷阱-迭代器失效问题的总结

    关于STL的erase()陷阱-迭代器失效问题的总结

    下面小编就为大家带来一篇关于STL的erase()陷阱-迭代器失效问题的总结。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看...

    C语言教程网11902021-04-24
  • C/C++深入学习C++智能指针之shared_ptr与右值引用的方法

    深入学习C++智能指针之shared_ptr与右值引用的方法

    智能指针的核心实现技术是引用计数,每使用它一次,内部引用计数加1,每析构一次内部的引用计数减1,减为0时,删除所指向的堆内存,今天通过本文给...

    进击的汪sir6812021-11-24
  • C/C++C语言实现餐饮点餐管理系统

    C语言实现餐饮点餐管理系统

    这篇文章主要为大家详细介绍了C语言实现餐饮点餐管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    Sriven9642021-07-20
  • C/C++贪吃蛇游戏C++命令行版实例代码

    贪吃蛇游戏C++命令行版实例代码

    这篇文章主要介绍了贪吃蛇游戏C++命令行版实例代码,包含了常见的循环语句及相关游戏规则的判定方法,有助于更好的理解游戏设计原理,需要的朋友可以参...

    C++教程网7262021-02-02
  • C/C++探讨C++中不能声明为虚函数的有哪些函数

    探讨C++中不能声明为虚函数的有哪些函数

    下面小编就为大家带来一篇探讨C++中不能声明为虚函数的有哪些函数。希望对大家有所帮助。一起跟随小编过来看看吧,祝大家游戏愉快哦...

    C++教程网4782021-04-26
  • C/C++C++解密Chrome80版本数据库的方法示例代码

    C++解密Chrome80版本数据库的方法示例代码

    这篇文章主要介绍了C++解密Chrome80版本数据库的方法示例代码,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需...

    FreeBuf10782021-09-03
  • C/C++C++随机点名生成器实例代码(老师们的福音!)

    C++随机点名生成器实例代码(老师们的福音!)

    这篇文章主要给大家介绍了关于C++随机点名生成器的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要...

    BeyondLimits10402021-07-12
  • C/C++strcat函数实现简单示例

    strcat函数实现简单示例

    这篇文章主要介绍了strcat函数实现简单示例,需要的朋友可以参考下...

    C语言程序设计4562021-01-18