字符函数和字符串函数

一、字符分类函数

以下是 C 语言中 <ctype.h> 头文件字符分类函数的汇总表格:

函数 功能描述
iscntrl(c) 判断字符是否为控制字符(如 \n\t\r 等不可打印的控制类字符)
isspace(c) 判断字符是否为空白字符(包括空格、\f\n\r\t\v
isdigit(c) 判断字符是否为十进制数字(0-9)
isxdigit(c) 判断字符是否为十六进制数字(0-9、a-f、A-F)
islower(c) 判断字符是否为小写字母(a-z)
isupper(c) 判断字符是否为大写字母(A-Z)
isalpha(c) 判断字符是否为字母(a-z 或 A-Z)
isalnum(c) 判断字符是否为字母或数字(a-z、A-Z、0-9)
ispunct(c) 判断字符是否为标点符号(非字母、非数字的可打印图形字符,如!、,、; 等)
isgraph(c) 判断字符是否为图形字符(可打印且非空白的字符,即排除空格的可打印字符)
isprint(c) 判断字符是否为可打印字符(包括图形字符和空白字符)

所有函数的参数为字符的 ASCII 码(通常传入 char 类型会自动转换),返回值为非 0(真)或 0(假)。

这些函数都比较类似,因此我们可以拿一个函数来讲


islower 是能够判断参数部分的 c 是否是⼩写字⺟的。
通过返回值来说明是否是⼩写字⺟,如果是⼩写字⺟就返回⾮0的整数,如果不是⼩写字⺟,则返回0。

二、字符转换函数

在 C 语言中,<ctype.h> 头文件除了字符分类函数,还提供了两个常用的字符转换函数,用于大小写字母之间的转换:

函数 功能描述
tolower(int c) 若字符 c 是大写字母(A-Z),则返回对应的小写字母(a-z);否则返回原字符。
toupper(int c) 若字符 c 是小写字母(a-z),则返回对应的大写字母(A-Z);否则返回原字符。

1.将小转大,如图:

2.将大转小,如图:

三、strlen的模拟实现和使用

  • 字符串以 '\0' 作为结束标志,strlen函数返回的是在字符串中 '\0' 前⾯出现的字符个数(不包
  • 含 '\0' )。
  • 参数指向的字符串必须要以 '\0' 结束。
  • 注意函数的返回值为size_t,是⽆符号的( 易错 )
  • strlen的使⽤需要包含头⽂件
  • 学会strlen函数的模拟实现

如图:

strlen的模拟实现:

实现思路

  1. 接收一个字符串(char* 类型指针)作为参数。
  2. 初始化一个计数器,记录字符个数。
  3. 遍历字符串:只要当前字符不是 \0,计数器加 1,指针向后移动一位。
  4. 当遇到 \0 时,停止遍历,返回计数器的值。

方式一:计数器方式

​​​​​​​

方式二:递归方式(无计算器)

方式三:指针相减

四、strcyp的模拟实现和使用

  • 源字符串必须以 '\0' 结束。
  • 会将源字符串中的 '\0' 拷⻉到⽬标空间。
  • 目标空间必须⾜够⼤,以确保能存放源字符串。
  • ⽬标空间必须可修改。
  • 学会模拟实现。

模拟实现:

五、strcat的模拟实现和使用

  • 源字符串必须以 '\0' 结束。
  • ⽬标字符串中也得有 \0 ,否则没办法知道追加从哪⾥开始。
  • ⽬标空间必须有⾜够的⼤,能容纳下源字符串的内容。
  • ⽬标空间必须可修改。
  • 字符串⾃⼰给⾃⼰追加,如何?

示例:

模拟实现

六、strcmp的模拟实现和使用

  • 第⼀个字符串⼤于第⼆个字符串,则返回⼤于0的数字
  • 第⼀个字符串等于第⼆个字符串,则返回0
  • 第⼀个字符串⼩于第⼆个字符串,则返回⼩于0的数字
  • 那么如何判断两个字符串? ⽐较两个字符串中对应位置上字符ASCII码值的⼤⼩。

示例:

模拟实现:

七、strncpy函数的使用

strcpy 的区别

特性 strcpy strncpy
复制长度 复制整个源字符串(直到 \0 仅复制前 n 个字符
终止符 自动复制源字符串的 \0 仅当源字符串长度 < n 时,才用 \0 填充剩余位置;否则需手动添加
安全性 低(易缓冲区溢出) 较高(可指定复制长度)

八、strnact函数的使用

特性 strcat strncat
拼接长度 无限制,拼接源字符串的全部内容 (直到 \0 有长度限制,最多拼接 n 个字符
终止符处理 自动复制源字符串的 \0,拼接后目标字符串末尾有且仅有一个 \0 无论是否复制满 n 个字符,最终会强制添加一个 \0
安全性 低(若源字符串过长,易导致目标空间溢出) 较高(通过 n 限制拼接长度,避免溢出)
适用场景 明确源字符串长度≤目标剩余空间时 需要精确控制拼接字符数量的场景(如用户输入截断)

九、strncmp函数的使用

strcmp 的区别

特性 strcmp strncmp
比较长度 比较整个字符串(直到 \0 仅比较前 n 个字符
终止条件 遇到不相等字符或 \0 时终止 遇到不相等字符或比较满 n 个字符时终止
安全性 低(若字符串无 \0,会越界比较) 较高(通过 n 限制比较长度)
适用场景 需完整比较字符串时 需精确控制比较长度的场景(如版本号比较 v1.2v1.2.3 的前 4 个字符)

十、strstr 的使⽤和模拟实现

示例:

模拟实现:

十一、strtok函数的使用

strtok 是字符串分割的常用工具,适合按固定分隔符拆分字符串(如 CSV 格式、命令行参数等),但需注意其对原字符串的修改和线程安全性限制。

十二、strerror函数的使用

在使用的话需要添加头文件<error.h>

strerror 是 "错误码翻译器",通过它可以将抽象的错误码转换为人类可读的文字描述,是调试和错误处理的重要工具,尤其在文件操作、网络编程等容易出错的场景中频繁使用。

举例:

perror函数的使用

perror 是简化错误信息输出的工具,适合快速调试或输出错误日志,其本质是 strerror(errno) 的 "一键打印版",使用起来比 strerror 更简洁。

特性 perror strerror
功能 直接打印错误信息(含自定义提示) 返回错误信息字符串(需手动打印)
输出方式 自动输出到标准错误流(stderr 需配合 printf 等函数输出
依赖 errno 直接使用当前 errno 的值 需要显式传入错误码(通常是 errno
输出格式 自动添加冒号、空格和换行符 仅返回字符串,格式需手动控制

示例:

相关推荐
八个程序员3 小时前
自定义函数(C++)
开发语言·c++·算法
ad钙奶长高高3 小时前
【C语言】初始C语言
c语言·开发语言·算法
梓仁沐白3 小时前
csapp实验一:datalab
开发语言
侯小啾3 小时前
【17】C语言-gets() 与 fgets() 函数
c语言·开发语言
罗西的思考3 小时前
【Agent】 ACE(Agentic Context Engineering)源码阅读笔记---(3)关键创新
人工智能·算法
胡桃夹夹子3 小时前
存档111111111
java·开发语言
不会编程的小寒3 小时前
C++ 中string的用法
java·开发语言
想搞艺术的程序员3 小时前
Go Error 全方位解析:原理、实践、扩展与封装
开发语言·后端·golang