| |
|
开发:
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语言】模拟实现字符串函数(上) -> 正文阅读 |
|
[C++知识库]【c语言】模拟实现字符串函数(上) |
关关难过关关过 前路漫漫亦灿烂 今天 阿紫 就带领大家一起挑战字符串函数的模拟实现 目录 C语言中对?字符串?的处理很是频繁,C语言本身是没有字符串类型,但有字符类型,字符串通常放在 常量字符串 中或者 字符数组 中。 字符串常量:适用于那些不做修改的字符串函数,因为字符串常量是常量,常量是不允许被修改的,它存放在常量区。 1.模拟实现strlen?1.1函数介绍strlen:求字符串长度 注:字符串以?\0?作为字符串结束标志,strlen 函数返回的是 \0?之前的字符个数,不包含 \0 1.2函数的模拟实现?我们既然要模拟实现 strlen 函数,就得模拟的像一点,我们可以通过查询找到 strlen 函数的形式,通过查找,我们可以发现函数的参数是一个字符指针类型,返回值是 size_t (无符号整型)
2.模拟实现strcpy2.1函数介绍strcpy:字符串拷贝函数,将一个字符串的内容拷贝到另一个字符串中 2.2函数模拟实现通过查询?strcpy 函数,我们可以发现 strcpy 函数有两个参数分别都是指针类型,第一个指针指向的是目标空间,第二个指针指向的是源字符串,我们要把源字符串拷贝到目标空间中,所以目标空间要足够大,能存储的下源字符串,并且可修改。
思考:在字符串拷贝的时候会把源字符串的 ‘\0’ 拷贝进去嘛? 通过调试,我们可以知道拷贝时会把 ‘\0’ 拷贝进去。 3.模拟实现strcat3.1函数介绍strcat:字符串追加函数,将一个字符串追加到另一个字符串的后面 3.2函数模拟实现通过查询?strcat?函数,我们可以发现 strcat?函数有两个参数分别都是指针类型,第一个指针指向的是目标空间,第二个指针指向的是源字符串,我们要把源字符串追加到目标空间中,所以目标空间要足够大,能存储的下追加的源字符串,并且可修改。
分析:找到目标空间 '\0' 的位置,然后将源字符串的字符依次追加到目标空间里面,目标空间的 ‘\0’?是会被替换掉的,直到源字符串赋值到 ‘\0’ 给目标空间就结束追加。 思考:字符串可以自己给自己追加嘛? 结论:strcat 不可以自己给自己追加,因为一旦自己给自己追加就改变了 '\0',那么就一直追加下去,程序就会造成死循环。 4.模拟实现strcmp?4.1函数介绍strcmp:字符串比较函数,是用来比较两个字符串大小的函数。 很多人会误以为字符串比较跟整型比较的方法一样,这是不正确的? 结论:上述代码充分证明了,字符串不能跟整型数据一样比较,那字符串与字符串怎么比较呢,字符串与字符串用 strcmp 函数来比较。 4.2函数模拟实现函数参数是两个指针,分别指向着两个需要比较的字符串,因为只需要比较不需要改变,所以前面加上了 const 。返回值为 int ,第一个字符串大于第二个字符串,则返回大于 0 的数字;第一个字符串等于第二个字符串,则返回0;第一个字符串小于第二个字符串,则返回小于0的数字。
分析:首先如果*str1 == *str2 ,就进入循环判断它们是否都为 '\0' ,如果是说明它们两个都结束了,且相等,那么就返回 0。否则就 str1++,str2++ 比较下一个字符是否相等,如果不相等就直接退出循环,返回 *str1 - *str2,如果返回的结果为负数,说明?*str1 小于 *str2,否则大于。 5.模拟实现strstr5.1函数介绍strstr:在一个字符串中找子串,例如 “abcdef”,找子串“def”,如果 “def” 在这个字符串中,则返回在这个字符串中找到子串的第一个字符的地址。 5.2函数的模拟实现函数参数分别是两个字符指针类型,分别指向了两个字符串,第二个字符串叫做子串,就在第一个字符串中找子串,如果找到则返回在第一个字符串中查找的子串的第一个字符的地址。
情况一:直接找到,然后对 s1 和 s2 解引用 比较,当 *s2 == '\0' 时,说明查找完毕,找到了。如果找不到,当 *p == ‘\0’ 退出循环,也就说明没有找到。 情况二:找多次找到,第一次找到了 '?b'? ,*s1 和 *s2 都是 'b',当 s1++ 和 s2++,解引用然后它们里面的字符不相同了。然后 p 指向下一个字符,s1 = p ,s2 回到它第一个字符的位置,然后在找到与 s2 相同的字符然后在比较,直到?*s2 == '\0' 时,说明查找完毕,找到了。如果找不到,当 *p == ‘\0’ 退出循环,也就说明没有找到。 6.了解strtok6.1函数介绍strtok:字符串分割函数? 6.2函数使用?
7.了解strerror7.1函数介绍strerror:返回错误码,所对应的错误信息。 7.2函数使用
目前我没有创建 aaa.txt 文件,这个程序就会将错误码转换为错误信息打印出来。 |
|
C++知识库 最新文章 |
【C++】友元、嵌套类、异常、RTTI、类型转换 |
通讯录的思路与实现(C语言) |
C++PrimerPlus 第七章 函数-C++的编程模块( |
Problem C: 算法9-9~9-12:平衡二叉树的基本 |
MSVC C++ UTF-8编程 |
C++进阶 多态原理 |
简单string类c++实现 |
我的年度总结 |
【C语言】以深厚地基筑伟岸高楼-基础篇(六 |
c语言常见错误合集 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
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/23 16:57:39- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |