news 2026/4/23 3:35:26

超全字符和字符串函数介绍,看看有没有你不会的

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
超全字符和字符串函数介绍,看看有没有你不会的

在c语言的使用当中,我们常常需要对一些字符和字符串进行操作,为了方便使用,c语言标准库里提供了一系列函数,让我们来学习一下这些函数

1.字符分类函数

顾名思义,字符分类函数就是对字符进行分类的函数,为了使用这些函数,我们需要包含一个头文件,ctype.h.,下图是对这些函数进行的介绍

这些函数的使用方法都是非常类似的,所以我们只介绍其中一个

islower:该函数用来判断字符是否为小写字母,是的话返回非0的数,不是则返回0

练习:将字符串中小写字母转为大写,其他字符不变

这里来给大家一个练习,下面为解法

2.字符转换函数

c语言标准库中提供了两个字符转换函数,tolower函数和toupper函数,两者分别用来将大写字符转化为小写字符,将小写字符转化为大写字符

有了这两个函数,上述的练习就可以直接使用。

3.strlen函数

该函数需要包含string.h这个头文件

size_t strlen(const char *a)

功能:用来计算a指向的字符串'\0'之前字符的个数

返回值:返回的是字符串的长度,不会是负数,所以函数的返回类型是size_t.

3.1代码演示

下面来演示一下该函数的使用

注意事项:1.该函数统计的是字符串里'\0'之前字符的个数,不包括'\0'

2.传给函数的指针指向的字符串必须包含'\0'

3.函数的返回值类型为size_t(无符号整数)

3.2函数的模拟实现

这里提供3种方法

3.2.1计数器

这里通过定义一个计数器来计算字符串的长度

3.2.2递归

递归是一种算法思想,通过将一个大的目标细化为一个个小的任务

可以看到,在my_strlen函数中,先对指针a指向的数据进行判断,如果是'\0',说明a已经遍历完这个字符串了,直接返回0就可以,如果不是'\0',说明字符串中还有元素没有计算,返回1和a的下一个指针的函数值。

这样可以不用创建临时变量,一层套一层,同样也能达到同样的效果

3.2.3指针

这个方法是通过指针来实现的,这里补充一些指针的知识

我们都知道指针+数字可以得到另一个指针,指针-数字也可以得到另一个指针,那么指针是否也可以进行+-运算呢,答案是可以进行-运算,不能进行+运算,指针+指针是没有任何意义的,而指针-指针则可以得到一个数字,这个数字的含义是,第一个指针和第二个指针中间相差的指针的个数

tips:地址在内存中是从低到高进行储存的

接下来来通过指针的方法进行计算

这种方法也是可行的

4.strcpy函数

功能:这个函数用来将source指向的字符串拷贝到destination指向的字符串

参数:destination:指向目标字符串,source:指向源字符串

返回值:直接返回目标空间的起始地址

4.1代码演示

这里来演示一下strcpy函数的使用

注意事项:1.该函数会将源字符串中的字符包括'\0'一起复制到目标字符串中

2.源字符串必须要有'\0'结尾

3.目标空间必须足够大,以保证可以存得下源字符串

4.目标空间必须可修改

这里补充下一个知识,为什么一定要强调目标空间必须可修改呢,那么有没有目标空间不能修改的情况?有的,c语言中提供了一个关键字const

4.2 const

const是用来修饰变量的,使用方法是直接在变量的创建前加上const

const在修饰指针变量时要更特殊些

4.2.1const修饰指针变量

这里可以分为两种情况

第一种写法:const int * pa;

这种写法的意思是你不能通过pa进行解引用从而更改pa指向的对象的值

第二种写法: int* const pa;

这种写法的意思是,你不能修改pa这个指针中的地址,但可以通过这个指针修改pa指向的变量的值

4.3模拟实现

接下来,我们来模拟实现一下这个函数

tips:这里的assert断言需要包含头文件assert.h

5.strcat函数

接下来来介绍strcat函数

功能:将src字符串的内容拷贝到des字符串的后面

参数和返回值与strcpy函数一下,这里不啰嗦了.

5.1代码演示

这里定义a,b数组时不能像前面一样不指定数组大小,这样会导致后面出现栈溢出的问题

5.2模拟实现

创建临时变量now的意义是储存des指向字符串的首地址

6.strcmp函数

功能:用来比较两个字符串的大小,从第一个字符开始比较,如果str1>str2,返回大于0的数,如果str1<str2,返回小于0的数,如果两个字符串相等,就返回0

参数;两个用来比较的字符串

6.1代码演示

6.2模拟实现

7.strncpy函数

这个函数与strcpy是类似的,只不过strncpy多了一个参数,这个参数是用来指定拷贝个数的

7.1代码演示

这个函数只拷贝了2个字符,也就是ef到a字符串中,覆盖掉了ab

7.2对比strcpy

这个函数与strcpy不同的点除了可以指定拷贝元素的个数外,它并不要求源字符串中有'\0',同时使用的时候也需要考虑到目标空间是否足够

8.strncat函数

这个函数与strcat函数是类似的,只不过它同样多了可以指定元素的功能,它能够指定你要追加的元素个数

8.1代码演示

这里指定的参数是2,所以就只拷贝了ed到a字符串的后面

8.2对比strcat

除了可以指定参数外,strncat并不要求源字符串中有'\0'

9.strncmp函数

同样与strcmp函数相似,这个函数可以指定要比较的字符个数

9.1代码演示

由于只比较了前三个字符,所以返回的是0

9.2对比strcmp

可以指定比较的长度,更加灵活,安全

10.strstr函数

功能:这个函数是用来在第一个字符串中查找第二个字符串的

返回值:如果找到了,就返回第一次出现第二个字符串的地址,如果没找到,则返回空指针

10.1代码演示

10.2模拟实现

这里运用多个指针来进行该函数的模拟实现。

首先创建s1,s2指针表示当前查找到的位置

再创建一个cp指针来表示可能查找到第二个字符串的位置

11.strtok函数

char*strtok(char* str,const char*delim);

功能:将第一个字符串按照提供的分隔符delim分成一个个子字符串,同时也会直接修改第一个字符串,会插入'\0'来替换分割符的位置

参数:str:要分割的字符串(首次调用传入字符串,后续调用传入指针,表示继续切割同一个字符串),delim:分隔符.

返回值:成功时返回指向当前子字符串的指针,如果没有子字符串了,就返回NULL

11.1代码演示

11.2注意事项

1.多个连续的分割符会被视为一个分格符,不会返回空字符串

2.在传入NULL之前,必须调用一次函数

12.strerror函数

char*strerror(interrnum );

功能:根据传递过来的整数返回相应的错误码

返回值:错误码字符串的地址

12.1代码演示

13.perror函数

perror相当于printf函数和strerror函数相结合

以上就是本篇文章的全部内容了,如果对你有帮助,可以点个赞支持一下,感谢各位的观看

陌染青云 (mo-ran-qingyun) - Gitee.com

这是我个人的gitee仓库,账号上文章的代码都会发到仓库里,有兴趣可以看一下

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/17 7:21:37

空洞骑士模组安装终极指南:Scarab管理器一键搞定

空洞骑士模组安装终极指南&#xff1a;Scarab管理器一键搞定 【免费下载链接】Scarab An installer for Hollow Knight mods written in Avalonia. 项目地址: https://gitcode.com/gh_mirrors/sc/Scarab 你是否曾经为《空洞骑士》模组安装的繁琐步骤感到头疼&#xff1f…

作者头像 李华
网站建设 2026/4/17 7:12:30

FlowState Lab 模型API接口详解与调用实战

FlowState Lab 模型API接口详解与调用实战 1. 快速了解FlowState Lab API FlowState Lab是一个专注于创意内容生成的AI模型平台&#xff0c;通过API接口可以轻松调用其强大的文本生成能力。无论你是开发者还是内容创作者&#xff0c;掌握这些API调用方法都能大幅提升工作效率…

作者头像 李华
网站建设 2026/4/18 10:29:12

DownKyi终极指南:5分钟掌握B站视频下载完整教程

DownKyi终极指南&#xff1a;5分钟掌握B站视频下载完整教程 【免费下载链接】downkyi 哔哩下载姬downkyi&#xff0c;哔哩哔哩网站视频下载工具&#xff0c;支持批量下载&#xff0c;支持8K、HDR、杜比视界&#xff0c;提供工具箱&#xff08;音视频提取、去水印等&#xff09;…

作者头像 李华
网站建设 2026/4/17 7:11:18

设备不能成为专线?

要彻底理解为什么“设备不能被称为专线”&#xff0c;可以从载体与内容的关系来看。我们可以把设备比作“航站楼”&#xff0c;而专线则是从这个航站楼出发的一条“固定航线”。 以下是四个维度的总结&#xff1a; 1. 载体与业务的关系 (Container vs. Service) 设备是硬件实体…

作者头像 李华
网站建设 2026/4/19 4:31:02

JetsonNano实战(二)VMware虚拟机Ubuntu环境配置

1. VMware虚拟机安装与Ubuntu 18.04配置 如果你正准备开始Jetson Nano的开发工作&#xff0c;那么配置一个合适的开发环境是第一步。我推荐使用VMware虚拟机来安装Ubuntu 18.04系统&#xff0c;这是最稳定可靠的方案。为什么选择虚拟机&#xff1f;因为它能让你在不影响主机系统…

作者头像 李华
网站建设 2026/4/17 6:52:57

周红伟:Openclaw银行不在观望,养虾Openclaw·正忙,银行如何养虾

银行终于对OpenClaw&#xff08;“龙虾”&#xff09;下手了。当AI智能体实现从“对话AI”到“自主型AI”的范式跃迁&#xff0c;为商业银行的办公和运营效率提高&#xff0c;以及服务模式升级带来了诸多想象空间。近日&#xff0c;邮储银行、农业银行两家国有银行均表示布局了…

作者头像 李华