【C语言】字符(串)函数详解~

一、前言

  • 这一期的博客,将会着重讲解常见的字符或字符串的相关库函数
  • C语言中有一组库函数专门用来处理字符类型的数据的,后文则会介绍字符分类函数以及字符转换函数
  • 字符串相关的函数是本篇博客的重点,这也是为什么标题是字符串函数详解。我们不但会学习这些库函数的使用,而且一些重要的库函数进行模拟实现,以学习他的算法思想也是重中之重,这对我们日后的C语言的学习的提升有着很大的帮助。
  • 字符函数的头文件:<ctype.h>
  • 字符串函数的头文件:<string.h>

二、字符函数

1.字符分类函数:
  • 用来判断一个字符是否符合规定的某一类型要求,若符合规定某一类型的要求,则会返回非0的数字,也就是真,若不符合则返回0,也就是假。
  • ES:isspace(),用来判断输入的字符的类型是否是空白字符,若是空白字符则会返回非0值,否则返回0;
  • 注:控制字符,其实可以理解为转义字符;图形字符就是可以打印在终端上显示出来的。
2.字符转换函数:
  • int tolower(int c),大写字母转小写字母;int toupper(int c),小写字母转大写字符。

三、字符串函数

1.strlen
  • 函数声明:size_t strlen(const char* string);
  • 函数功能:获取一个字符串的长度,其长度指的是字符串结束标志( '\0' )之前的字符个数包括空白字符。
  • 模拟实现:(更多的是模拟实现算法,请点击下面链接)
  • 设计函数模拟strlen函数实现字符串长度计算的三种方法-CSDN博客
  • 代码案例:

2.strcpy
  • 函数声明:char* strcpy(char* dest,const char* sour);
  • 函数功能:将sour中的字符串内容拷贝到dest中,包括('/0' );遇到'/0' 时拷贝结束。
  • 模拟实现:
  • 代码案例
3.strcat
  • 函数声明:char* strcat(char* dest,const char* sour);
  • 函数功能:在dest字符串末尾,追加sour字符串。
  • 模拟实现:
  • 代码案例:
4.strcmp
  • 函数声明:int strcmp(const char* str1,const char* str2);
  • 函数功能:按字典序从前往后比较两个字符串的的大小;若两字符串相等,则返回0,若str1 > str2 ,则返回大于0的值,若str1 < str2 ,则返回小于0的值。
  • 模拟实现:
  • 代码案例:
5.strncpy
  • 函数声明:char* strcpy(char* dest,const char* sour,size_t num);
  • 函数功能:与strcpy的区别就是,拷贝num个字符。
  • 注意事项:你让拷贝几个就拷贝几个,不自动补'\0';若源头字符串拷贝完了,则会拷贝 '\0' ,直到拷贝数目达到num个。
  • 代码案例:
6.strncat
  • 函数声明:char* strcat(char* dest,const char* sour,size_t num);
  • 函数功能:与strcat的区别就是,追加num个字符。
  • 注意实现:为了保证追加后的字符串能为字符串(以'\0'为结束标志的一组字符)。每次追加完num个字符后,会自动补上'\0'。且num表示的是最大追加的字符个数(当源头字符串追加完之后,无论num是否为0,都将停止追加)。
  • 代码案例:
7.strncmp
  • 函数声明:int strcmp(const char* str1,const char* str2,size_t num);
  • 函数功能:与strcmp的区别就是,仅比较num个字符。
8.strstr
  • 函数声明:char* strstr(const char* str1,const char* str2);
  • 函数功能:在字符串str1中搜索为str2的字串;若搜索到,则返回该字串在str1的首字符地址。否则将返回NULL;若str2为空串(长度为0的字符串),则将str1的首字符地址直接返回。
  • 模拟实现:
  • 代码案例:
9.strtok
  • 函数声明:char* strtok(char* str1,const char* str2);
  • 函数功能:根据str2字符串中的字符,将str1字符串进行切割。
  • 函数说明:第⼀个参数指定⼀个字符串,它包含了0个或者多个由str2字符串中⼀个或者多个分隔符分割的标记。第二个参数指向⼀个字符串,定义了⽤作分隔符的字符集合。strtok函数的第⼀个参数不为 NULL时 ,函数将找到str中第⼀个标记,并将其⽤ \0 结尾,strtok函数将保存它在字符串中的位置。strtok函数的第⼀个参数为 NULL 时,函数将在同⼀个字符串中被保存的位置开始,查找下⼀个标strtok函数找到str中的下⼀个标记,并将其⽤ \0 结尾,返回⼀个指向这个标记的指针。注:strtok函数会改变被操作的字符串,所以在使⽤strtok函数切分的字符串⼀般都是临时拷⻉的内容并且可修改。如果字符串中不存在更多的标记,则返回 NULL 指针。
  • 代码案例:
10.strerror
  • 函数声明:char * strerror ( int errnum );
  • 函数功能:strerror函数可以把参数部分错误码对应的错误信息的字符串地址返回来。
  • 函数说明:在不同的系统和C语⾔标准库的实现中都规定了⼀些错误码,⼀般是放在<errno.h>这个头⽂件中说明的,C语⾔程序启动的时候就会使⽤⼀个全⾯的变量errno来记录程序的当前错误码,只不过程序启动的时候errno是0,表⽰没有错误,当我们在使⽤标准库中的函数的时候发⽣了某种错误,就会讲对应的错误码,存放在errno中,⽽⼀个错误码的数字是整数很难理解是什么意思,所以每⼀个错误码都是有对应的错误信息的。strerror函数就可以将错误对应的错误信息字符串的地址返回。
  • 代码案例:
11perror
  • 函数声明:void perror( const char *string );
  • 函数功能:是strerror与perror等函数功能结合体。
  • 代码案例:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/543248.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【2024年5月备考新增】《软考真题分章练习 - 5 项目进度管理(高项)》

1、( ) is a technique for estimating the duration or cost of an activity or a project using historical data from a similar activity or project. A.Analogous estimating B. parametric estimating C.Three-Point estimating D. Bottom estimating 2、下图中(单位:…

k8s的pod和svc相互访问时网络链路解析

k8s的pod和svc相互访问时网络链路解析 1. k8s环境中pod相互访问1.1. k8s中pod相互访问的整体流程1.2. k8s的相同机器的不同pod相互访问1.3. k8s的不同机器的不同pod相互访问 2. k8s访问svc2.1 nat操作2.2 流量进入到后端pod 3. 疑问和思考3.1 访问pod相互访问为什么不用做nat?…

STL_vector详解和迭代器失效问题解释

文章目录 vector介绍vector的使用vector构造函数的使用vector迭代器的使用vector空间函数的使用vector的增删查改 关于迭代器失效问题 二次修订于date&#xff1a;2024&#xff1a;3&#xff1a;16 vector介绍 vector是一个大小动态可变的一个数组的序列容器。 动态可变自然就是…

C#控制台贪吃蛇

Console.Write("");// 第一次生成食物位置 // 随机生成一个食物的位置 // 食物生成完成后判断食物生成的位置与现在的蛇的身体或者障碍物有冲突 // 食物的位置与蛇的身体或者障碍物冲突了&#xff0c;那么一直重新生成食物&#xff0c;直到生成不冲突…

JVMJava虚拟机

JVM的内存区域 程序计数器&#xff1a; 字节码解释器通过改变程序计数器来依次读取指令&#xff0c;从而实现代码的流程控制&#xff0c;如&#xff1a;顺序执行、选择、循环、异常处理。 在多线程的情况下&#xff0c;程序计数器用于记录当前线程执行的位置&#xff0c;从而当…

跨境电商选品实战——Ownips公开数据信息安全采集+Python爬虫轻松搞定Lazada电商选品

文章目录 一、引言二、Lazada电商平台选品实战2.1、分析Lazada电商平台的商品列表接口2.2、定位商品列表计算逻辑2.3、封装高质量住宅IP2.4、运行爬虫 三、数据处理及选品分析四、Ownips——企业级全球静态住宅IP&#xff0c;高效采集公开数据 一、引言 互联网与外贸的结合&am…

AI对话/绘画完整系统(附完整源码,已开源)

文章目录 功能UI界面使用地址环境完整源码 功能 支持邮件激活账号&#xff0c;微信登录&#xff0c;短信登录支持上下文对话支持GPT4,claude3文件/图片分析分析&#xff0c;几乎所有模型均支持支持模糊匹配自定义回复消息支持按此按张按余额多种扣费方式支持套餐卡密生成及自定…

D6212——安防摄像头(IPC)的步进马达及IR-CUT驱动芯片

应用领域 安防摄像头&#xff08;IPC&#xff09;的步进马达及IR-CUT驱动。 02 功能介绍 D6212内置8路带有续流二极管的达林顿驱动管阵列和一个H桥驱动&#xff0c;单芯片即可实现2个步进电机和一个IR-CUT的直接驱动&#xff0c;使得电路应用非常简单。单个达林顿管在输入电压…

SQLiteC/C++接口详细介绍之sqlite3类(十六)

返回目录&#xff1a;SQLite—免费开源数据库系列文章目录 上一篇&#xff1a;SQLiteC/C接口详细介绍之sqlite3类&#xff08;十五&#xff09; 下一篇&#xff1a; SQLiteC/C接口详细介绍之sqlite3类&#xff08;十七&#xff09;&#xff08;未发表&#xff09; 50.sqlite…

Docker 哲学 - 容器操作

容器&#xff1a; 创建 停止 删除 强制删除&#xff08;正在运行&#xff09; run stop rm rm -f 列出本地容器&#xff1a; docker ps / docker container ls 镜像&#xff1a; search pull run &#xff1a; …

力扣100题—持续更新

目录 LC141环形列表(easy)题目描述方法1&#xff1a;快慢指针&#xff08;1&#xff09;思路&#xff08;2&#xff09;python代码&#xff08;3&#xff09;复杂度分析 LC881救生艇&#xff08;medium&#xff09;题目描述方法1&#xff1a;双指针-对撞指针&#xff08;1&…

轻松管理文件:一键批量导出位置与名称至表格

在数字化时代&#xff0c;我们每天都在与大量的文件打交道。从工作文档到个人照片&#xff0c;从研究报告到会议记录&#xff0c;管理这些文件成为了一项挑战。为了帮助您轻松应对这一挑战&#xff0c;我们推出了一项新功能——批量导出文件位置与名称至表格&#xff01;让您的…