字符函数和字符串函数

一、字符分类函数

以下是 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
输出格式 自动添加冒号、空格和换行符 仅返回字符串,格式需手动控制

示例:

相关推荐
q***649711 小时前
SpringMVC 请求参数接收
前端·javascript·算法
Lwcah11 小时前
Python | LGBM+SHAP可解释性分析回归预测及可视化算法
python·算法·回归
小此方11 小时前
从零开始手搓堆:核心操作实现 + 堆排序 + TopK 算法+ 向上调整 vs 向下调整建堆的时间复杂度严密证明!
开发语言·数据结构·算法
_OP_CHEN11 小时前
从零开始的Qt开发指南:(五)Qt 常用控件之 QWidget(上):解锁 Qt 界面开发的核心基石
开发语言·c++·qt·前端开发·qwidget·gui开发·qt常用控件
wjs202411 小时前
SQLite 视图
开发语言
q***448111 小时前
java进阶--多线程学习
java·开发语言·学习
艾斯比的日常11 小时前
Neo4j 完全指南:从核心特性到 Java 实战(附企业级应用场景)
java·开发语言·neo4j
后端小张12 小时前
【JAVA 进阶】深入探秘Netty之Reactor模型:从理论到实战
java·开发语言·网络·spring boot·spring·reactor·netty
柠石榴12 小时前
go-1 模型
开发语言·后端·golang
q***d17313 小时前
Rust在网络中的协议栈
开发语言·网络·rust