news 2026/8/12 21:27:25

C语言字符串相关函数(strcspn、strspn、strchr、strstr、strtok、isXXX)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
C语言字符串相关函数(strcspn、strspn、strchr、strstr、strtok、isXXX)

目录

1. strcspn 函数

2. strspn 函数

3. strchr 函数

4. strstr 函数

5.总结

6.strtok

6.2. 工作原理

7. isdigit 函数

8. isalpha 函数

9. isupper 函数

10. islower 函数

11. isalnum 函数

12. isspace 函数

13. ispunct 函数

14.总结


1.strcspn函数

项目说明
函数原型size_t strcspn(const char *str1, const char *str2);
头文件<string.h>
功能计算字符串str1开头连续有几个字符不在字符串str2
返回值第一个在str2中出现的字符在str1中的索引位置
名称含义String Complement Span(字符串补集跨度)
参数描述
str1要扫描的字符串
str2包含要匹配字符的字符串
示例代码输出结果
strcspn("abc123", "123")3
strcspn("hello world", " ")5
strcspn("password", "!@#")8(直到结束都没找到)
strcspn("123abc", "abc")0(第一个字符就在set中)
应用场景示例
去除换行符buffer[strcspn(buffer, "\n")] = '\0';
查找分隔符int pos = strcspn(path, "/\\");
验证非法字符if (strcspn(input, illegal) < strlen(input))

2.strspn函数

项目说明
函数原型size_t strspn(const char *str1, const char *str2);
头文件<string.h>
功能计算字符串str1开头连续有几个字符在字符串str2
返回值开头连续匹配字符的数量
名称含义String Span(字符串跨度)
参数描述
str1要扫描的字符串
str2包含允许字符的字符串
示例代码输出结果
strspn("abc123", "abc")3
strspn("111222", "12")6
strspn("hello", "abcdefghijklmnop")5
strspn("123abc", "123")3
应用场景示例
统计前导数字int len = strspn(str, "0123456789");
验证数字输入if (strspn(input, "0123456789") == strlen(input))
跳过空白符int pos = strspn(str, " \t\n");

3.strchr函数

项目说明
函数原型char *strchr(const char *str, int c);
头文件<string.h>
功能在字符串中查找第一次出现的指定字符
返回值指向第一次出现字符的指针,未找到返回NULL
名称含义String Character(字符串中的字符)
参数描述
str要扫描的字符串
c要查找的字符(以int形式传递,会被转换为char
示例代码输出结果
strchr("hello", 'l')指向"llo"的指针
strchr("hello", 'x')NULL
strchr("abcabc", 'a')指向第一个"abcabc"的指针
应用场景示例
查找字符位置char *p = strchr(str, '@');
截取子串printf("%s", strchr(str, '.'));
统计字符出现次数while((p = strchr(p+1, ch)) != NULL) count++;
进阶用法说明
strrchr(str, c)从右侧开始查找(最后一次出现)

4.strstr函数

项目说明
函数原型char *strstr(const char *haystack, const char *needle);
头文件<string.h>
功能在字符串中查找第一次出现的子字符串
返回值指向第一次出现子串的指针,未找到返回NULL
名称含义String String(字符串中的字符串)
参数描述
haystack要被搜索的主字符串
needle要搜索的子字符串
示例代码输出结果
strstr("hello world", "world")指向"world"的指针
strstr("abcabc", "ca")NULL(找不到)
strstr("123123", "23")指向第一个"23123"的指针
应用场景示例
查找关键词if (strstr(text, "error") != NULL)
提取文件扩展名char *ext = strstr(filename, ".txt");
字符串替换结合其他函数实现替换功能
注意事项说明
空子串如果needle为空字符串,返回haystack
大小写敏感区分大小写,如需忽略大小写用strcasestr()(非标准)

5.总结

函数查找目标返回类型返回内容示例结果
strcspn字符集size_t第一个匹配字符的位置strcspn("abc123","123")3
strspn字符集size_t开头连续匹配的数量strspn("abc123","abc")3
strchr单个字符char*指向该字符的指针strchr("hello",'l')"llo"
strstr子字符串char*指向子串的指针strstr("hello","ll")"llo"

6.strtok

令牌(Token)是指被分割符分隔开的、具有独立意义的字符串片段

项目说明
函数原型char *strtok(char *str, const char *delim);
头文件<string.h>
功能将字符串分割成一系列令牌(token)
返回值指向下一个令牌的指针,如果没有更多令牌则返回NULL
名称含义String Token(字符串令牌)
参数描述
str要分割的字符串(第一次调用时传入),后续调用传入NULL
delim分隔符集合(包含所有可能的分隔字符)

6.2.工作原理

步骤说明示例
第一次调用传入要分割的字符串,函数找到第一个分隔符,将其替换为\0,返回指向字符串开头的指针strtok(str, ",")
后续调用传入NULL,函数从上次保存的位置继续查找下一个令牌strtok(NULL, ",")
结束条件当没有更多令牌时,返回NULL循环结束
#include <stdio.h> #include <string.h> int main() { // 1. 定义一个要分割的字符串 char str[] = "apple-banana-orange"; // 2. 使用strtok分割(以"-"为分隔符) char *token = strtok(str, "-"); // 3. 循环打印所有令牌 while (token != NULL) { printf("%s\n", token); // 打印当前令牌 token = strtok(NULL, "-"); // 获取下一个令牌 } return 0; } /* 输出: apple banana orange */

7.isdigit函数

项目说明
函数原型int isdigit(int c);
头文件<cctype>(C++) 或<ctype.h>(C)
功能检查字符是否为十进制数字
返回值如果是数字(0-9)返回非零值,否则返回0
名称含义Integer DIGIT(整数数字)
输入字符返回值说明
'0'-'9'非零值(通常为1)所有数字字符
'A'0字母不是数字
' '0空格不是数字
'\n'0换行符不是数字
'$'0特殊符号不是数字
应用场景示例
验证数字输入if (!isdigit(c)) return false;
提取字符串中的数字if (isdigit(str[i])) num = num * 10 + (str[i] - '0');
解析用户输入检查输入是否全为数字

8.isalpha函数

项目说明
函数原型int isalpha(int c);
头文件<cctype>(C++) 或<ctype.h>(C)
功能检查字符是否为字母
返回值如果是字母(A-Z或a-z)返回非零值,否则返回0
名称含义ALPHAbet(字母表)
输入字符返回值说明
'A'-'Z'非零值大写字母
'a'-'z'非零值小写字母
'0'0数字不是字母
' '0空格不是字母
'?'0符号不是字母
应用场景示例
验证姓名输入if (!isalpha(name[i])) 错误提示
统计文本中的字母数if (isalpha(text[i])) letterCount++;
过滤非字母字符只保留字母用于进一步处理

9.isupper函数

项目说明
函数原型int isupper(int c);
头文件<cctype>(C++) 或<ctype.h>(C)
功能检查字符是否为大写字母
返回值如果是大写字母(A-Z)返回非零值,否则返回0
名称含义UPPER case(大写)
输入字符返回值说明
'A'-'Z'非零值大写字母
'a'-'z'0小写字母不是大写
'0'0数字不是字母
' '0空格不是字母
应用场景示例
检查密码复杂性if (isupper(pwd[i])) hasUpper = true;
转换大小写tolower(c)常与isupper配合使用
统计大写字母分析文本中大写字母的出现频率

10.islower函数

项目说明
函数原型int islower(int c);
头文件<cctype>(C++) 或<ctype.h>(C)
功能检查字符是否为小写字母
返回值如果是小写字母(a-z)返回非零值,否则返回0
名称含义LOWER case(小写)
输入字符返回值说明
'a'-'z'非零值小写字母
'A'-'Z'0大写字母不是小写
'0'0数字不是字母
' '0空格不是字母
应用场景示例
检查密码复杂性if (islower(pwd[i])) hasLower = true;
转换大小写toupper(c)常与islower配合使用
统计小写字母分析文本中小写字母的出现频率

11.isalnum函数

项目说明
函数原型int isalnum(int c);
头文件<cctype>(C++) 或<ctype.h>(C)
功能检查字符是否为字母或数字
返回值如果是字母(A-Z,a-z)或数字(0-9)返回非零值,否则返回0
名称含义ALpha NUMeric(字母数字)
输入字符返回值说明
'A'-'Z'非零值大写字母
'a'-'z'非零值小写字母
'0'-'9'非零值数字
' '0空格不是字母数字
'@'0符号不是字母数字
应用场景示例
过滤特殊字符只保留字母和数字用于用户名验证
字符串清理移除标点符号和空格
分词处理识别单词和数字的边界

12.isspace函数

项目说明
函数原型int isspace(int c);
头文件<cctype>(C++) 或<ctype.h>(C)
功能检查字符是否为空白字符
返回值如果是空白字符返回非零值,否则返回0
名称含义SPACE(空格)
空白字符ASCII值说明
' '32空格
'\t'9水平制表符
'\n'10换行
'\v'11垂直制表符
'\f'12换页
'\r'13回车
应用场景示例
去除字符串首尾空白配合指针移动跳过空白
单词计数根据空白符分割单词
格式化解析跳过空格和制表符

13.ispunct函数

项目说明
函数原型int ispunct(int c);
头文件<cctype>(C++) 或<ctype.h>(C)
功能检查字符是否为标点符号
返回值如果是标点符号返回非零值,否则返回0
名称含义PUNCTuation(标点)
标点符号示例说明
.!?,';:句号、感叹号、问号、逗号等
-()[]{}括号、破折号等
@#$%^&*特殊符号
+/<=>运算符符号
应用场景示例
移除标点符号if (!ispunct(c)) 保留字符
文本分析统计文章中标点符号的使用频率
语法检查识别句子结束符

14.总结

函数检查内容返回真时的字符常见应用
isdigit()数字0-9验证数字输入
isalpha()字母A-Z,a-z验证文本输入
isupper()大写字母A-Z密码复杂度检查
islower()小写字母a-z密码复杂度检查
isalnum()字母或数字A-Z,a-z,0-9过滤特殊字符
isspace()空白字符空格、制表符、换行等单词分割
ispunct()标点符号.,!?;:文本清理
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/14 15:46:23

Matlab Simulink 下的 Buck和Boost型双向DC-DC变换器:电压电流双闭...

matlab/simulink&#xff1a;buck型降压双向dc/dc变换器和boost型升压双向dc/dc变换器&#xff0c;均采用电压电流双闭环PI控制&#xff0c;负载为恒功率负载&#xff0c;波形质量良好&#xff0c;可自行调试参数 版本matlab2020b&#xff0c;所有部分均由simulink模块搭建&…

作者头像 李华
网站建设 2026/7/14 15:46:25

RHEL9.7虚拟机部署及后续优化

一、搭建环境前的准备工作首先在搭建环境前将安装包提前解压到电脑D:\RHCSA文件夹(一定不要下载到C盘&#xff01;&#xff01;&#xff01;&#xff09;二、创建新的虚拟机二、RHEL后续优化从阅读模式进入编辑者模式从编辑模式退回阅读模式按ESC键并按住shift&#xff1a;输入…

作者头像 李华
网站建设 2026/7/14 15:46:24

Qwen2-VL-2B-Instruct在C++项目中的调用指南:高性能AI应用开发

Qwen2-VL-2B-Instruct在C项目中的调用指南&#xff1a;高性能AI应用开发 本文旨在帮助C开发者快速掌握Qwen2-VL-2B-Instruct模型的集成与调用方法&#xff0c;实现高性能AI应用开发。 1. 开篇&#xff1a;为什么选择C集成AI模型 如果你正在开发需要高性能AI能力的C应用&#x…

作者头像 李华
网站建设 2026/7/14 15:46:26

零代码部署实时口罩检测-通用:基于ModelScope的完整操作流程

零代码部署实时口罩检测-通用&#xff1a;基于ModelScope的完整操作流程 1. 项目简介与核心价值 实时口罩检测-通用是一个基于DAMO-YOLO框架开发的高效目标检测模型&#xff0c;专门用于识别图像中的人脸并判断是否佩戴口罩。这个模型在精度和速度之间取得了出色平衡&#xf…

作者头像 李华
网站建设 2026/7/14 15:46:28

YOLO11新手实战:跟着步骤完成第一个目标检测项目

YOLO11新手实战&#xff1a;跟着步骤完成第一个目标检测项目 1. 项目介绍与环境准备 1.1 YOLO11简介 YOLO11是当前最先进的目标检测算法之一&#xff0c;以其快速、准确的特点在计算机视觉领域广受欢迎。这个镜像提供了完整的YOLO11运行环境&#xff0c;包含所有必要的依赖项…

作者头像 李华
网站建设 2026/7/16 22:05:37

Minitab正交试验从入门到精通:5步搞定实验设计与数据分析

Minitab正交试验从入门到精通&#xff1a;5步搞定实验设计与数据分析 在工程优化与科研实验中&#xff0c;如何用最少的实验次数获得最可靠的结论&#xff1f;正交试验设计正是解决这一难题的利器。作为统计软件中的标杆工具&#xff0c;Minitab提供了从实验设计到结果分析的全…

作者头像 李华