当前位置: 首页 > news >正文

C语言字符函数和字符串函数

1.字符分类函数

2.字符转换函数

3.strlen的使用和模拟实现

4.strcpy的使用和模拟实现

5.strcat的使用和模拟实现

6.strcmp的使用和模拟实现

7.strncpy函数的使用

8.strncat函数的使用

9.strncmp函数的使用

10.strstr的使用和模拟实现

11.strtok函数的使用

12.strerror函数的使用

在本章关于字符函数和字符串函数的内容中,我们需要引入的头文件有:

#include<string.h>(用于字符串函数),

#include<ctype.h>(用于字符分类与转换函数)。

一.字符分类函数

十个分类函数

1.isspace(c):空白字符:空格、\n \t \r \v \f

2.isdigit(c):十进制数字0~9

3.isxdigit(c):十六进制0-9,a-f,A-F

4.islower(c):小写字母 a~z

5.isupper(c):大写字母 A~Z

6.isalpha(c):字母(大小写)

7.isalnum(c):字母 + 数字

8.ispunct(c):标点符号

9.isgraph(c):可见非空格字符

10.isprint(c):可打印字符(含空格)

使用上面的函数需要声明头文件:#include<ctype.h>;

使用规则

1.返回值:非 0 = 条件成立;0 = 不成立,不要直接判断==1

2.参数隐患:字符若为负数(如中文、扩展 ASCII)会出错,规范写法:函数名((unsigned char)ch)

3.只判断,不修改字符本身

例一:

int main() { int r = isdigit('x'); //int r = isdigit('8'); //int n = islower('8'); int n = islower('A'); printf("%d\n", r); printf("%d\n", n); return 0; }

代码运行结果:

例二:写一个代码,将字符串中的小写转换成大写字母,其他字符不变

int main() { char arr[] = "I am a Student!"; int i = 0; while (arr[i] != '\0') { if (islower(arr[i])) arr[i] -= 32; printf("%c", arr[i]); i++; } return 0; }

代码运行结果:

二.字符转换函数

1.tolower:大写字母转小写

2.toupper:小写字母转大写

代码块:

int toupper(int c);int tolower(int c);

例三:大写字母转小写

int main() { //int r = tolower('x'); int r = tolower('X'); //printf("%c\n", r); putchar(r); return 0; }

代码运行结果:

例四:小写字母转大写

int main() { int r = toupper('x'); printf("%c\n", r); putchar(r); return 0; }

代码运行结果:

三.strlen的使用和模拟实现

代码块:

size_t strlen(const char *str);

功能:统计参数str指向的字符串的长度。统计的是字符串中'\0'之前的字符的个数。

参数:

str:指针,指向了要统计长度的字符串。

返回值:返回了str指向的字符串的长度,返回的长度不会是负数,所以返回类型是size_t.

四.strcpy的使用和模拟实现

代码块:

char* strcpy(char* dest,const char* src);

功能:字符串的拷贝,拷贝到源头字符串中的\0为止。

参数:

dest:指针,指向目标空间起始地址;

src:指针,指向源字符串起始地址;

返回值:strcpy返回目标空间 dest 的起始地址。

五.strcat的使用和模拟实现

代码块:
char* strcat(char* dest,const char* src);

功能:字符串追加,将 src 指向的字符串中所有字符都追加到 dest 指向的空间。

参数:

dest:指针,目标空间起始地址;

src:指针,源字符串起始地址。

返回值:返回 dest 目标空间的起始地址(char*)。

六.strcmp的使用和模拟实现

代码块:

int strcmp(const char* str1,const char* str2);

功能:

逐字符比较 str1 和 str2 两个字符串的 ASCII 码值,直到出现不同字符或者遇到'\0'停止比较。参数:

str1:待比较的第一个字符串起始地址;

str2:待比较的第二个字符串起始地址;

const 修饰,函数内部不会修改两个字符串。

返回值:

>0:str1 > str2

=0:str1 == str2

<0:str1 < str2

七.strncpy函数的使用

代码块:

char* strncpy(char* dest,const char* src,size_t num);

功能:

从 src 指向字符串拷贝最多 num 个字符到 dest 指向空间。

若 src 字符串长度小于 num,剩余空间填充\0

若 src 长度≥num,仅拷贝 num 个字符,不会自动追加结束符\0

参数:

dest:指针,目标空间起始地址;

src:指针,源字符串起始地址;

返回值:返回 dest 目标空间起始地址(char*)。

八.strncat函数的使用

代码块:
char* strncat(char* dest,const char* src,size_t num);

功能:字符串追加,把src指向的源字符串中的所有字符都追加到dest指向的空间中。

参数:

dest:指针,目标空间起始地址;

src:指针,源字符串起始地址;

返回值:返回 dest 目标空间的起始地址(char*)。

九.strncmp函数的使用

代码块:

intstrncmp(const char* str1,const char* str2,size_t num);

功能:字符串比较;比较str1和str2指向的两个字符串的内容,最多比较num字符。

参数:

str1:指针,指向一个比较的字符串;

str2:指针,指向另外一个比较的字符串;

num:最多参与比较的字符数量(size_t 无符号整数);

返回值:

>0:str1 对应位置字符大于 str2

=0:前 num 个字符全部相等

<0:str1 对应位置字符小于 str2

十.strstr的使用和模拟实现

代码块:
char* strstr(const char* str1,const char* str2);

功能:

strstr函数,查找str2指向的字符串在str1指向的字符串中第一次出现的位置。

简而言之:在一个字符串中查找子字符串。

strstr的使用得包含<string.h>

参数:

str1:指针,指向了被查找字符串;

str2:指针,指向了要查找字符串;

返回值:

如果str1指向的字符串中存在str2指向的字符串,那么返回第一次出现位置的指针

如果str1指向的字符串中不存在str2指向的字符串,那么返回NULL;

十一.strtok函数的使用

代码块:
char* strtok(char* str,const char* delim);

功能:

分割字符串:根据delim参数中指定的分隔符,将输入字符串str拆分成多个子字符串。

修改原始字符串:strtok会直接在原始字符串中插入'\0'终止符,替换分隔符的位置,因此原始字符串会被修改。

参数:

str:第一次调用传入字符串地址;后续继续分割传入 NULL,表示继续分割同一个字符串

delim:包含所有可能分隔符的字符串。

返回值:

分割成功,返回当前片段起始地址;

分割完毕返回 NULL。

十二.strerror函数的使用

代码块:

char* strerror(int errnum);

功能:

strerror函数可以通过参数部分的errnum表示错误码,得到对应的错误信息,并且返回这个错误信息字符串首字符地址。

strerror函数只针对标准库中的函数发生错误后设置的错误码的转换。

strerror的使用需要包含<string.h>

参数:

errnum:表示错误码

返回值

函数返回通过错误码得到的错误信息字符串的首字符的地址。

http://www.jsqmd.com/news/1303984/

相关文章:

  • J-Link V9固件修复实战:使用ST-Link通过SWD接口重刷STM32F205
  • 解锁GPT潜能:三层配置法打造你的专属AI副脑
  • 2026年精选:四川可靠的瓷砖生产厂商为何聚焦佛山智造 - 装修教育财税推荐2026
  • 数据库问题不用再找专家,问 DBCopilot 就行 —— 一图看懂你的数据库 AI 副驾
  • 文山母婴除甲醛公司测甲醛中心怎么选:金耀母婴除甲醛标准、流程、避坑指南 - CMA甲醛检测中心
  • STM32与W5500以太网通信:从硬件设计到Modbus TCP实战
  • 5个必备的Illustrator自动化脚本:彻底告别重复性设计工作
  • Codex 能提效?先看看联调失败那一次
  • 硬件工程师必备:时序图核心要素解析与典型接口实战调试
  • 基于GEE的BAP算法实现遥感影像像素级融合
  • 晋中母婴除甲醛公司测甲醛中心怎么选:金耀母婴除甲醛标准、流程、避坑指南 - CMA甲醛检测中心
  • 株洲母婴除甲醛公司测甲醛中心怎么选:金耀母婴除甲醛标准、流程、避坑指南 - CMA甲醛检测中心
  • 汇编语言实验四核心解析:[bx]与loop指令的深度理解与实践
  • 2026年断路器与低压电器供应链实力之选:苏州杭焕自动化设备有限公司的全维度解析 - 卓企推荐
  • VC++多线程同步实战:Windows事件机制与生产者-消费者模型详解
  • 【无标题】补充耕地质量鉴定
  • 使用Serva搭建PXE服务器实现Windows 10网络自动化安装
  • 足迹交易原则解析:从市场微观结构到实战策略
  • 2026 大连市西岗区正规管道疏通优质服务商全解析 五大街道全域上门无死角服务 - 园子一号
  • Java DelayQueue实战:从订单超时到延时任务调度
  • 自研原生3D图形渲染底座:镜像视界视频孪生摆脱开源依赖,实现动态实景秒级复刻 研发课题方案
  • 游戏剧情编辑器实战:从数据驱动到可视化分支管理
  • 01. 搭服务器:处理器、路由表、读请求参数(细讲)
  • 荆门母婴除甲醛公司测甲醛中心怎么选:金耀母婴除甲醛标准、流程、避坑指南 - CMA甲醛检测中心
  • 数据血缘安全防护体系架构与实战解析
  • 驻马店母婴除甲醛公司测甲醛中心怎么选:金耀母婴除甲醛标准、流程、避坑指南 - CMA甲醛检测中心
  • 盐城母婴除甲醛公司测甲醛中心怎么选:金耀母婴除甲醛标准、流程、避坑指南 - CMA甲醛检测中心
  • DAQ-GP-CT485电流互感器自动化测试方案与RS485通信实战
  • 触摸技术原理与架构全解析:从电容屏到多点触控实现
  • 2026年7月评价好的冷藏库直销厂家推荐,中型冷库/医药冷库/低温冷库/双温冷库/移动冷库/冷藏库,冷藏库供应商找哪家 - 品牌推荐师