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