一、字符函数

1.1 字符分类函数

C 语言有一系列函数是专门做字符分类的,也就是一个字符是属于什么类型的字符的。这些函数的使用都需要包含一个头文件 ctype.h

函数 参数条件
iscntrl 任何控制字符
isspace 空白字符
isdigit 十进制数字
isxdigit 十六进制数字
islower 小写字母
isupper 大写字母
isalpha 字母
isalnum 字母或者数字
ispunct 标点符号
isgraph 任何图形字符
isprint 任何可打印字符

上面函数的用法基本一致,这里仅举一个例子。

int islower(int c)

islower 可以判断 c 是否是小写字母并通过返回值来说明是否是小写字母,如果是小写字母就返回非 0 的整数,如果不是小写字母,则返回 0。

1.2 字符转换函数

C 语言中还提供了 2 个字符转换函数:

int tolower(int c);  // 将参数穿进去的大写字母转小写
int toupper(int c);  // 将参数传进去的小写字母转大写

二、字符串函数

2.1 strlen 函数

size_t strlen(const char *str);

字符串以 \0 作为结束标志,strlen 能够返回字符串中 \0 前面出现的字符个数(不包括 \0),故参数指向的字符串必须要以 \0 结束。需要注意的是,函数的返回值类型为 size_t,是无符号的。

2.2 strcpy 函数

strcpy 函数

char *strcpy(char *destination, const char *source);

strcpy 函数能将源字符串(source) 拷贝到目标空间(destination)中。其源字符串
必须以\0 结束,因为 strcpy 会将源字符串中的 \0 拷贝到目标空间。同时需要注意的是目标空间必须足够大且能可修改,以确保能存放源字符串。
strncpy 函数

char *strncpy(char *destination, const char *source, size_t num);

strcpy 函数不会检查缓冲区的大小,如果目标空间的大小不够会发生缓存区溢出的情况,因此在实际应用中,更多还是使用 strncpy 函数来规避这个安全隐患。strncpy 函数增加了一个参数 num,表示从源字符串拷贝 num 个字符到目标空间中,如果源字符串的长度小于 num,则在目标后面追加 0,直到 num 个。

2.3 strcat 函数

strcat 函数

char *strcat(char *destination, const char *source);

strcat 函数能够将源字符串(source)追加到目标字符串(destination)的末尾同时覆盖掉目标字符串末尾的结束标志 \0 并将源字符串的 \0追加到新字符串的末尾。需要注意的是目标空间必须足够大且可修改,以保证能够容纳下字符串的内容。
strncat 函数

char *strncat(char *destination, const char *source, size_t num);

strcat 函数与 strncpy 函数一样,存在目标空间溢出的风险,因此实际中常使用 strncat 函数规避这个问题。strncat 函数会将源字符串的前 num 个字符追加到目标字符串的末尾,再追加一个 \0 字符,如果源字符串的字符串长度小于 num 的时候,只会将到 \0 的内容追加到目标字符串的末尾。

2.4 strcmp 函数

int strcmp(const char *s1, const char *s2);

strcmp 函数能够将两个字符串(s1 和 s2)进行比较,并返回一个数字以判断两个字符串的大小关系。若 s1 大于 s2,则返回大于 0 的数字;若 s1 等于 s2,则返回 0;若 s1 小于 s2,则返回小于 0 的数字。
strncmp 函数

int strncmp(const char *str1, const char *str2, size_t num);

同样为了规避空间溢出的风险,使用 strncmp 函数。str1 函数比较 str1 和 str2 的前 num 个字符,如果相等就继续比较,最多比较 num 个字母,如果提前发现不一样就结束。


总结

本文主要介绍了字符函数和字符串函数,其中字符函数定义在头文件 ctype.h 中,包括字符判断函数和字符转换函数;字符串函数定义在头文件 string.h 中,主要包含字符串长度计算,字符串拷贝,字符串追加和字符串比较函数。

Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐