字符函数和字符串函数

1. 引文

在编程的过程中,我们经常要处理字符和字符串,为了⽅便操作字符和字符串,C语言标准库中提供了 ⼀系列库函数,接下来我们就学习⼀下这些函数。

2. 字符函数

2.1 字符分类函数

c语言中有一些专门用来做字符分类的函数,也就是一个字符属于什么类型的字符。

这些函数有一个共用的头文件ctype.c

并不是这些函数都要学习,我们只需知道这些函数有什么作用就行,需要使用是可以直接去查找就行了,这些函数的使⽤⽅法⾮常类似,我们就讲解⼀个函数的事情,其他的非常类似:

islower判断参数部分中的c是否是小写字母。通过返回值来说明是否是小写字⺟,如果是小写字母就返回非0的整数,如果不是小写字⺟,则返回 0。

使用方式都是差不多的,所以我们大致只需要知道有个库函数有这个作用就行了。

2.2 字符转换函数

C语言中的字符转换函数就只要2个,分别对应大写转小写和小写转大写。

应用一下:

这里有个putchar输出单个字符,并不区分大小写,上面也有出现,这里补充一下。

3. 字符串函数

3.1 strlen

这个函数我已经讲过很多遍了,但是现在还是要补充一下,strlen是用于求字符串长度的,并且会将字符串后的\0减掉,计算字符串的长度我还是建议使用strlen。

3.1.2 strlen的返回值

这就是我现在要补充的东西,我们前面从来没有分析过strlen的返回值类型。

strlen的返回值类型就是size_t类型;size_t是无符号类型不能直接和有符号负数比。我们用来验证一下:

可见,strlen返回值是无符号类型(易错),还有头文件一定要记得。

3.3 strcpy

当我们需要将一个字符串拷贝到另一个地方,我们就可以通过strcpy来执行。

功能:字符串拷贝,拷贝到源头字符串中的 \0 为止。

后面拷贝到前面,返回拷贝的地址。

注意一下:字符和字符串函数的头文件都是string.h

strcpy拷贝会将字符串后面的 \0 一起拷贝过去。

3.4 strcat

这是一个追加函数,在字符串后面追加一个字符串。

也是后面向前面追加。这个追加我们只能追加到目标字符串的后面,不能加到前面。

追加是从目标字符的\0开始往后拷贝,直至拷贝完成strcat会自动补上一个新的\0,只是将目标字符串后面的\0覆盖了,并没有删除。

3.5 strcmp

这是一个用于比较的函数,字符并不是数字,比较只能使用ASCLL来比较。

这两个参数就没有顺序的要求,只需记住比较的结果即可。

这个比较的过程中,前面两个字符是一样的,我们就一直比下去,第三个字符c和q比较,两个的ASCLL向比较很明显arr1要小于arr2。

3.6 strncpy

看到这个你们肯定会想到前面的strcpy,这二者有什么区别呢?

我们先来看一下strncpy:

strncpy可以指定拷贝的字符数量,这不难看出区别strcpy只能将字符全部拷贝,strncpy则是可以拷贝部分字符。

3.6.1 strncpy和strcpy的区别

除了作用上有些区别之外,还有其他的区别:

strcpy函数拷贝到\0为止,如果空间不够很容易出现越界的风险。

strncpy函数指定了拷贝的长度,源字符串不⼀定要有\0,同时在设计参数的时候就会多⼀层思考:目标空间的大小是否够用,strncpy 相对 strcpy 函数更加安全。

3.7 strncat

通过上面的函数我相信不难猜出这个函数有什么作用,都是多了个n,作用也都有相同之处。

也是可以控制追加的字符个数。

3.8 strncmp

这三个函数都是相差不大的,都是增加一个控制参数。

这个则是控制最多比较的字符个数。

这几个函数都是有关联的,从3个扩展到6个,对我们记忆并没有提高,反而加深了我们的记忆。

3.9 strstr

这是一个字符查找的函数,在字符串中找子字符串。

我们找到之后会将后面的所有字符都打印出来,这并不是函数所导致的只是使用s打印字符串会打印到\0。

3.10 strtok

这个函数是一个用于切割字符串的,例如我们平常的网址就可以切割成几分。

这里重点就是首次调用和后续调用。这个可以方便我们的调用。本质就是在要切割的地方插入\0终止符,进行分割。这里会破坏原有的字符串,所以我们如果既要分割又要保留的话可以先拷贝保存一份。

4. 总结

字符函数和字符串函数这其中的函数有很多,我们并不是全都要记住,至少我讲的要记住,这其中有很多向关联的函数,很方便记忆,并且难度也很一般很好理解,我们下文再见!

相关推荐
xiaobobo33308 小时前
c语言中for循环条件中定义临时栈变量的作用域
c语言·for循环条件定义栈变量·大括号作用域·独立栈变量
惜离殇9 小时前
从零开始的敲代码生活--Linux应用软件(文件操作基础1)
linux·c语言·文件操作·标准io
潘潘的嵌入式日记10 小时前
I²C 从机接收总被覆盖?双缓冲要在 STOP 时交接
c语言·开发语言·单片机
xx~t12 小时前
嵌入式——Linux软件编程——网络1
linux·c语言·网络·vscode·网络协议
羚尔15 小时前
C语言数组
c语言·开发语言
老当益壮梁奶奶18 小时前
Linux软件编程学习笔记(十一):深入浅出 TCP 协议与 Socket 编程实践
linux·c语言·笔记·学习·tcp/ip
Navigator_Z19 小时前
LeetCode //C - 1223. Dice Roll Simulation
c语言·算法·leetcode
Patrick在香港20 小时前
Python 拉取 C&SD 官方 API:香港 2022 年已跨过“超老龄线“,而抚养比正在爬回 1961
android·c语言·python·数据分析·时序数据库·数据可视化·香港
彷徨而立1 天前
【C/C++】多线程读写普通 int 变量的一些问题(二)
c语言·c++
luj_17681 天前
毒素驱动的生物自毁机制探析
服务器·c语言·开发语言·经验分享·算法