IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> 仅用实现求字符串长度功能的函数,让您掌握C语言中四大语法和两个难点(循环、判断、递归、指针和const、assert) -> 正文阅读

[C++知识库]仅用实现求字符串长度功能的函数,让您掌握C语言中四大语法和两个难点(循环、判断、递归、指针和const、assert)

各位看官们,你们好呀,简单自我介绍一下,我是一名初学C语言的小白,学C语言完全是出于热爱,所以,我的个性签名也是这句话:热爱可抵岁月漫长。当然啦,这也是我的座右铭,希望各位看官们也会执着追求自己所热爱的东西,为爱奋斗。

好了,咱们废话不多说,直入主题。

一、你真的了解C语言中字符串长度了吗?

相信很多初学C语言的朋友都知道怎么使用strlen库函数,那这个strlen到底是怎么一回事呢,还请让我给您细细道来......

通过学习我们知道,每个字符串都有它的结束标志,即'\0',比如:char? arr[]? =? "abc",在内存中存储时是这样子的,a b c \0,如下图所示:

从图片中可以明显看到(这里有一些VS里面调试的小技巧哦,看官们不了解的话我可以单独写一期有关VS调试的博客,我们来共同学习,一起进步),char所开辟的内存空间中,数组从下标0开始依次到下标4,分别存'a''b''c''\0'。我们先用strlen库函数编译一下,发现字符串“abc”的长度是3,这也就是说,'\0'仅是一个虚拟存在的判断标志,求字符串长度时并不会计算其中。也就是我刚刚给您说的本段第一句话:每个字符串的结束标志是'\0'。当我们了解完这个知识后,对于怎么求一个字符串长度,就变得很简单了。好的,理论存在,实践开始!

二、有几种方法可以实现呢?

方法1:最基础的while循环实现

在上面的代码中,我们用到的知识主要是while语句。我们知道,?数组的数组名是它首元素的地址,所以在my_strlen()中传参可以是char *str,*str是解引用后的数组内容,str是地址。while语句中的判断条件是*str!='\0',即满足这个条件时会执行count++和str++语句,直到不满足该条件,跳出循环,然后返回count值,count值就是所求字符串的长度。不知道这个方法您看懂没有呢?

方法2:用函数递归的方法来实现

在上面的代码中,我们使用了函数递归和if条件判断语句,可以明显看出来啊,代码是不是更加高大上了呢?我作为过来人,知道初学者对函数递归很难理解,但我相信,看完下面这张图,你对递归会有全新的认识。?

?

您看,程序从main函数出发,当遇到第一个my_strlen函数时,开始调用该函数,经过四次调用和四次递归,返回值就是字符串长度,递归过程您看看上图就秒懂了。如何,一个strlen函数的递归方法实现,是不是既对C语言中递归的过程和思想有了了解,而且对嵌套其中的if语句的使用更加熟练。接下来,我们来看看第三种方法。

方法3:用指针相减的方法实现

?使用这个方法之前呢,我们需要先了解一下这样一个规定——指针和指针相减,指针减指针得到的值是两个指针之间的元素个数,这样一来,怎么求字符串长度信手拈来,感觉这个规定的创造就是为了求字符串长度。于是,用最终++后的str减去start,就是所求字符串的元素个数,也就是字符串的长度。

方法4:使用const和assert对第三个方法进行优化

①assert:断言语句,可以理解为一个报错语句。assert()语句对于我们C语言初学者很有用,它可以说是一个专门调试程序时用的宏,在程序运行时计算括号内的表达式,若表达式为假?(即值为0), 程序将报告错误,并终止执行,同时也便于查找错误。如果表达式为真,则继续执行后面的语句。所以,如果程序没有error,assert就相当于不存在。还有,assert只有在 debug 版本中才有效,如果为 release 版本则直接被忽略。使用时要#include<assert.h>。

②const:const的基础用法有三种。

? ? ? ?其一,const修饰指针变量,如int * const p=&num,const放在*的右边,修饰的是指针变量p,表示指针变量p不能被改变,但是指针指向的内容*p可以被改变;

? ? ? ?其二,const修饰指针指向的内容,如const int * p=&num,const放在*的左边,修饰的是*p,表示指针指向的内容*p不能被改变,但是指针变量p是可以被修改的;

? ? ? ?其三,const修饰常量,如,const int num = 10;? num =20;这样是个error。

③因为我们需要计算字符串的长度,所以定义的函数返回值肯定是正整数,需要无符号整型,在C语言中,size_t就相当于unsigned int型。

了解了这三个知识点后,现在给您看看优化后的代码:??

这个代码中,使用const控制*str和*start无法改变,但str和start还可以变化(const后能够增加代码的”健壮性“)。while语句内的*start只是在++运算,用来判断'\0'在哪,并没有改变*start所指的内容。在本例中,my_strlen返回值是start-str-1=3;?

在下不才,目前也就只总结了上面这几种求字符串长度的方法,但是计算机语言非常灵活,只要是你学的够多,理解的够透彻,我相信肯定还会有无数种其它更简洁、性能更好的方法。

以上便是本期的主要内容了,不知道看官们读完后有没有耳目一新呢,欢迎在评论区留言,让我们互相监督互相学习!

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-10-16 19:28:07  更:2021-10-16 19:28:54 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 3:24:25-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码