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

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

1.字符分类函数

字符控制函数:int iscntrl ( int c );

控制字符通常不是可打印字符,该函数是用来判断参数是否为控制字符,需要的头文件为<ctype.h>

标准ASCII码中,不可打印字符主要包括以下两类:

控制字符:这些字符的ASCII编码值在0到31之间(包括0和31),以及127。常见的控制字符及其功能如下:

0 (NUL)-空字符,用于字符串的结束

1 (SOH)-文头,用于标识消息的开始

2 (STX)-文本开始

3 (ETX)-文本结束

4 (EOT)-文尾,表示数据结束

5 (ENQ)-询问,用于请求响应

6 (ACK)-确认,表示正确接收

7 (BEL)-响铃,用于发出声音警告

8 (BS)-退格,用于删除字符

9 (HT)-制表符,用于水平制表

10 (LF)-换行符,用于换行

12 (FF)-换页符,用于换页

13 (CR)-回车符,用于回车

31 (DEL)-删除字符,用于删除字符。

通信专用字符:这些字符也属于不可打印字符,用于特定的通信功能,例如SOH(文头)、EOT(文尾)等。

使用场景和功能

不可打印字符主要用于控制外围设备或显示器的行为。例如:

换行符?:\n(LF,ASCII值为10)用于在文本中创建新行。

回车符:\r?(CR,ASCII值为13)用于返回行首。

退格:\b?(BS,ASCII值为8)用于删除字符。

制表符:\t?(HT,ASCII值为9)用于水平制表。

响铃?:\a(BEL,ASCII值为7)用于发出声音警告。

例子:字符分类函数的使用方法类似

输出:

常见的字符分类函数

返回值:如果表达式为真返回非零值,否则返回0或EOF,表示为假。

2.字符转换函数

tolower和toupper

tolower函数是将大小字母转换为小写字母,函数的声明为:int tolower(int c);

toupper函数是将小写字母转换为大小字母,函数的声明为:int toipper(int c);

例子:将字符a转换为字符A,将字符X转换为x;

3. 字符串函数

所有字符串函数的使用对应的头文件是<string.h>或<cstring>

3.1 strlen函数

strlen函数是用来字符串\0前出现的字符个数,参数是字符串的起始地址,返回类型是无符号整型

strlen的模拟实现,使用递归的方式实现

3.2 strcpy函数

strcpy函数是将源头字符串拷贝到目标字符串中,第一个参数是目标字符串的起始地址,第二个参数是源头字符串的起始地址,返回的参数是char*类型,返回的是目标字符串的起始地址。

通过按F10启动调试观察ch1和ch2数组拷贝前的元素

调用strcpy函数后,ch2数组的内容拷贝到ch1数组上

strcpy的模拟实现

例子

启动调试观察到arr2字符串的\0也拷贝到目标字符串中

3.3 strcat函数

strcat函数的功能是在目标字符串后追加一个字符串,第一个参数是目标字符串的起始地址,第二个参数是追加字符串的地址,返回值是目标字符串的起始地址。

strcat的模拟实现

例子

启动调试观察窗口

3.4 strcmp函数

strcmp函数是用来比较两个字符串的大小关系,通过一对对字节来比较,直到\0为止;两个参数是需要比较的两个字符串的起始地址,返回值为int,如果str1>str2,返回大于0的数,如果str1 ==str2,返回0,如果str1 < str2,返回小于0的数。

按F10启动调试,第一次输入123456,input数组输入替换为123456

第二次输出666666,input数组被替换的部分为66666

第三次输入888888 ,与密码匹配,strcmp返回0,正确输出

strcmp的模拟实现

例子

3.5 strnncpy函数

与strcpy类似,功能是将源头字符串拷贝到目标字符串中,但是与strcpy区别的是strncpy有第三个参数,单位是字节,可以指定拷贝的字符个数。

按F10启动调试观察,strncpy调用后,将指定字节的数据拷贝,但是在末尾没有补\0

strncpy模拟实现:strncpy的源头字符串长度没有拷贝字符串长度长时,将剩下需要拷贝数组补\0

例子

3.6 strncat函数

strncat是指定字节个数将源头字符串的数组追加到目标字符串后,第一个参数是目标字符串的起始地址,第二个参数是源头字符串起始地址,第三个参数是需要拷贝的字节个数,返回值是目标字符串的起始地址。

按F10启动调试,可以观察到调用strncat函数后,原本p1数组为\0的位置被替换,p2数组不足5个字节,在拷贝p2数组\0前的数据后在p1数组后补一个\0后不再拷贝数据。

strncat的模拟实现

法一:使用for循环

法二:使用while循环

3.7 strstr函数的使用

strstr是在主串中寻找是否存在子串,如果找到返回在主串中第一次出现的起始位置,如果没有找到返回空指针NULL,strstr函数的声明需要两个参数,第一个参数的主串的起始位置的指针,第二个位置是子串的起始位置指针,返回值:如果找到返回在主串中第一次出现的起始位置,如果没有找到返回空指针NULL。

a主串中包含b子串,返回值pr接收主串第一次出现子串的位置,指向字符 'a' 的位置。

strstr的模拟实现,因为strstr的实现方式有比较多的方式,此处模拟实现的是最简单的一种,高效的实现方式有BF算法和KPM算法,此处不做具体接受,推荐链接:主要实现NEXT数组和VALUE数组,实现 i(主串下标)不退,j(字串下标)根据Next数组回退。

【完整版】终于有人讲清楚了KMP算法,Java语言C语言实现_哔哩哔哩_bilibili

s1是指向主串的指针,s2是指向子串的指针,p是记录主串的位置;第一次解引用s1 和 s2不匹配,p就指向第二个字符的位置,重新将p的值赋给s1,子串的起始位置重新赋给s2。

一直循环s1 和 s2 的解引用的解引用操作,直到子串遇到\0匹配成功或者匹配失败终止。

3.8 strtok函数的使用

strtok函数是将指定字符串中的分隔符替换为\0,第一个参数是字符串起始位置,第二参数是分隔符的地址,第一次调用,如果字符串有指定分隔符,返回字符串起始位置的地址,再次调用时,第一个参数为NULL,如果字符串中找到指定分割符,将分隔符替换为\0,返回上一次替换分隔符位置的下一位置,如果调用时查找的字符串没有指定分隔符,返回空指针。

在上图字符串中,abc后有一个指定分隔符 ‘ . ’ ,第一次调用strtok将‘ . ' 替换为\0,返回指向a的地址,第二次调用strtok时,将f后的' .' 替换为\0返回指向e的地址,第三次调用strtok函数,将s后的   ' . '替换为\0,返回指向s的地址,第四次调用没有分割符,传回上一个分隔符的下一位置,第五次时是访问的空间不属于字符串,返回NULL。

strtok的模拟实现

3.9 strerror函数

strerror函数通过标准错误的标号,获得错误的描述字符串 ,将单纯的错误标号转为字符串描述,方便用户查找错误。

strerror函数中的参数经常会使用errno,errno是一个全局变量,用来存放错误码,当程序错误是,会将错误信息存放于这个错误码中,使用这一个错误码需要包含其头文件<errno.h>.

以上是常见的字符相关的函数,更多的字符函数可以打开c语言库函数进一步了解:

<cstring> (string.h) - C++ Reference

http://www.xdnf.cn/news/538183.html

相关文章:

  • 如何实现从网页一键启动你的 Electron 桌面应用(zxjapp://)
  • pcie phy电气层(PCS)详解gen1、2 (rx)
  • 北斗卫星通讯终端的技术原理是什么
  • 2025-05-19 学习记录--Python-简易用户登录系统 + 计算天数
  • RAG策略
  • 第二章、IMU(Inertial Measurement Unit 惯性测量单元)
  • 包装可靠性测试【二】
  • C++寻位映射的奇幻密码:哈希
  • AtomicReference 和 volatile 的比较
  • C++--综合应用-演讲比赛项目
  • 让数据驱动增长更简单! ClkLog用户行为分析系统正式入驻GitCode
  • 【随手记】 Event Bus vs. Event Loop
  • 01、java方法
  • 【Python训练营打卡】day30 @浙大疏锦行
  • 盲盒APP开发——解锁盲盒经济无限可能
  • mapbox-gl强制请求需要accessToken的问题
  • Chromium 回调设计实战:BindOnce 与 BindRepeating 的最佳实践
  • 【css】【面试提问】css经典问题总结
  • Golang中的runtime.LockOSThread 和 runtime.UnlockOSThread
  • 嵌入式自学第二十四天
  • 整数的个数
  • Ollama 如何在显存资源有限的情况下合理分配给不同的服务?
  • 理解前端工程化
  • 新书速览|鸿蒙HarmonyOS NEXT开发之路 卷2:从入门到应用篇
  • java集成mqtt
  • 停等协议(Stop-and-Wait Protocol)
  • AI人工智能写作平台:AnKo助力内容创作变革!
  • 铅铋环境下应力腐蚀的疲劳试验装置
  • 什么业务需要用到waf
  • 20. 自动化测试框架开发之Excel配置文件的IO开发