【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等函数功能结合体。
  • 代码案例:

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【C++进阶】深度解析AVL树及其简单模拟实现

AVL树的解析和模拟实现 一&#xff0c;什么是AVL树二&#xff0c;AVL树的特性三&#xff0c;模拟实现1. 基本框架2. 插入&#xff08;不带旋转&#xff09;2. AVL树的旋转3. AVL树的验证 四&#xff0c;总结 一&#xff0c;什么是AVL树 之前我们学习了二叉搜索树&#xff0c;但…

C++实验 面向对象编程

一、实验目的&#xff1a; 掌握类中静态成员的定义方法&#xff0c;初始化方法&#xff0c;使用方法&#xff1b; 掌握类的友元说明方法&#xff0c;理解友元的使用特点 二、实验内容&#xff1a; 1、编写程序&#xff0c;统计某旅馆住宿客人的总数&#xff0c;要求输入客人…

计算机二级(Python)真题讲解每日一题:《绘制雪花》

在横线处填写代码&#xff0c;完成如下功能‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬…

Vue.js 应用实现监控可观测性最佳实践

前言 Vue 是一款用于构建用户界面的 JavaScript 框架。它基于标准 HTML、CSS 和 JavaScript 构建&#xff0c;并提供了一套声明式的、组件化的编程模型&#xff0c;帮助你高效地开发用户界面。无论是简单还是复杂的界面&#xff0c;Vue 都可以胜任。 TinyPro 是一套使用 Vue …

SQL Server错误:15404

执行维护计划失败&#xff0c;提示SQL Server Error 15404 无法获取有关... 异常如下图&#xff1a; 原因&#xff1a;数据库用户名与计算机名称不一致 解决办法&#xff1a;1.重名称数据库用户名 将前缀改成计算机名 2.重启SQL Server代理

JAVA基础—JVM内存结构基础需知

1.JVM内存结构 JVM内存结构分为5个区域&#xff1a;方法区&#xff0c;虚拟机栈&#xff0c;本地方法栈、堆、程序计数器。 1.方法区&#xff08;Method Area&#xff09;&#xff1a;用于存储类的结构信息、常量、静态变量、即使编译器编译后的代码等数据。方法区也是所有线…

Ansys Lumerical | 激光雷达天线仿真

附件下载 联系工作人员获取附件 在本文中&#xff0c;我们将了解如何根据激光雷达应用需求设计和优化相控阵光栅天线。 概述 激光雷达&#xff08;LIDAR&#xff09;是“light detection and ranging”的简称&#xff0c;近年来由于在机器人、自动驾驶汽车、高精度测绘等领域…

自动写作软件哪个好?分享7款独家推荐

随着人工智能技术的不断发展&#xff0c;自动写作软件正逐渐成为现代写作的利器。这些AI写作工具能够帮助用户高效地生成文章、报告、新闻稿等内容&#xff0c;为写作工作带来了极大的便利。然而&#xff0c;市面上的自动写作软件琳琅满目&#xff0c;让人眼花缭乱。为了帮助读…

Java多线程学习(一)

1、什么是多线程 进程的执行需要依赖线程。线程是进程的最小执行单位&#xff0c;每一个进程中最少有一个线程。 例如&#xff1a;使用某网盘下载时&#xff0c;当我们同时进行下载和上传操作时&#xff08;同一时间同时进行&#xff09;&#xff0c;就使用到了多线程&#x…

德国法兰克福交易所股票清单列表数据API接口

# Restful API https://tsanghi.com/api/fin/stock/XFRA/list?token{token}更新时间&#xff1a;收盘后3~4小时。 更新周期&#xff1a;每天。 请求方式&#xff1a;GET。 # 测试&#xff1a;返回不超过10条数据&#xff08;2年历史&#xff09; https://tsanghi.com/api/fin/…

【Java,Redis】Redis 数据库存取字符串数据以及类数据

1、 字符串存取数据 Resource private StringRedisTemplate stringRedisTemplate;//从Redis中获取string字符串 stringRedisTemplate.opsForValue().get("cache:shop:"id); //Json -> class Shop shop JSONUtil.toBean(ShopJson,Shop.class); //字符串写入redis…

基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的自动驾驶目标检测系统详解(深度学习+Python代码+PySide6界面+训练数据集)

摘要&#xff1a;开发自动驾驶目标检测系统对于提高车辆的安全性和智能化水平具有至关重要的作用。本篇博客详细介绍了如何运用深度学习构建一个自动驾驶目标检测系统&#xff0c;并提供了完整的实现代码。该系统基于强大的YOLOv8算法&#xff0c;并对比了YOLOv7、YOLOv6、YOLO…

什么是VR应急预案演练虚拟化|VR体验馆加盟|元宇宙文旅

VR 应急预案演练虚拟化指的是利用虚拟现实&#xff08;Virtual Reality&#xff0c;VR&#xff09;技术进行应急预案演练的过程。在传统的应急预案演练中&#xff0c;人们通常需要在实际场地或模拟环境中进行演练&#xff0c;这可能存在一些限制&#xff0c;如成本高昂、场地受…

解析KafkaConsumer类的神奇之道

欢迎来到我的博客&#xff0c;代码的世界里&#xff0c;每一行都是一个故事 解析KafkaConsumer类的神奇之道 前言KafkaConsumer双线程设计主线程&#xff08;消费线程&#xff09;&#xff1a;心跳线程&#xff1a;示例代码&#xff1a; KafkaConsumer线程不安全线程安全的替代…

PHP爬虫技术:利用simple_html_dom库分析汽车之家电动车参数

摘要/导言 本文旨在介绍如何利用PHP中的simple_html_dom库结合爬虫代理IP技术来高效采集和分析汽车之家网站的电动车参数。通过实际示例和详细说明&#xff0c;读者将了解如何实现数据分析和爬虫技术的结合应用&#xff0c;从而更好地理解和应用相关技术。 背景/引言 随着电…

非空约束

oracle从入门到总裁:​​​​​​https://blog.csdn.net/weixin_67859959/article/details/135209645 非空约束 所谓的非空约束&#xff0c;指的是表中的某一个字段的内容不允许为空。如果要使用非空约束&#xff0c;只需要在每个列的后面利用“NOT NULL”声明即可 -- 删除数…

Java习题中 哈希表的理论 有效的字母异位词 快乐数 两数之和

关于 哈希表的理论 今天最大的疑惑好像就是map的复杂度怎么算哈哈,一般n个元素map的复杂度就是On哦,不需要想得太复杂了,冲突的空间并不会造成一个量级,改变n前面的常数不会影响空间复杂度哈提醒&#xff01;熟悉好map,set的API哦 关于 有效的字母异位词 为什么遍历第二个字符…

Linux异步通知实验:应用程序对异步通知的处理

一. 简介 前面文章学习了 应用程序对异步通知的处理方法&#xff0c;另一篇文章实现了Linux驱动对异步通知的处理&#xff1a; Linux应用程序对异步通知的处理-CSDN博客 Linux异步通知实验&#xff1a;驱动中异步通知的处理-CSDN博客 本文继续Linux异步通知实验&#xff0c…

想进阿里?先搞懂Spring Bean作用域!

大家好,我是小米!今天我来和大家分享一下 Java 开发中一项非常重要的技术——参数校验。参数校验在我们的代码中起着至关重要的作用,它能够确保我们的应用程序接收到正确的数据,并且保证了系统的安全性和稳定性。在过去,我们可能会通过繁琐的 if-else 来进行参数校验,但是…

AI视频矩阵混剪系统|罐头鱼AI批量混剪定时发送

AI视频矩阵混剪系统&#xff1a;智能创作与发布的完美结合 随着社交媒体平台的快速发展&#xff0c;视频已成为各行业推广和传播的热门方式。然而&#xff0c;对于许多人来说&#xff0c;制作高质量的视频仍然是一项挑战。Q:290615413但现在&#xff0c;有了AI视频矩阵混剪系统…