【c语言】字符函数和字符串函数(1)

一、字符分类函数

          c语言中有部分函数是专门做字符分类的,也就是一个字符是属于什么类型的字符,这些函              数的使用要包含一个头文件ctype.h中。

           其具体如下图所示:

           

            这些函数的使用方式都类似,下面我们通过一个函数来看其使用方式:
                 

             islower函数是能够判断参数c是不是小写字母,如果参数c是小写字母那么就返回非0的整                 数,如果不是小写字母就返回0。

             下面我们通过一个练习来学习:

              将字符串中小写的字母变成大写的字母。

              思路:
              首先我们创建一个字符串数组存放这个字符串,然后遍历这个字符串,判断其是否为大                  写字母,如果不是则对其-32就可以变成大写字母了,然后我们将其打印出来看是否完                    成。记得要包含这个函数的头文件<ctype.h>

             

                

                运行结果:

               

二、字符转换函数

       c语言中提供了两个字符转换函数,要使用这两个函数也是一样要包含头文件<ctype.h>

                        

        那么我们上面的练习可以换个方式写:

         

          因为这两个函数的参数不是地址,那么其是值传递,那么其是不会改变实参的,不过其返回            的是变成大写后的字符,那么我们就通过一个第三者去接收其返回值,然后再赋值给这个字            符串。

         运行结果:

          

三、strlen的模拟实现 

          我们先看一下这个函数的原型:

          size_t  strlen(const char  * str);

          strlen函数的原理:

          字符串是以\0为结束的标志,strlen函数就是返回字符串中\0前面的字符个数(不包含\0)

          那么参数指向的字符串必须要以\0结尾

          注意函数的返回值为size_t类型,是无符号的类型。

          还有函数的使用要包含头文件string.h

          那么我们知道其计算字符串的长度的原理后我们来模拟实现这个函数吧。

          函数参数就和原型一样。

          函数实现:
          因为我们传递给函数的是个地址,那么我们可以使用断言,先判断传入的数据是可以使用              的。我们可以在函数的开始就对str参数使用assert对其进行断言,注意使用其要包含头文件            assert.h。

          然后我们创建一个指针变量来接收传入的参数的地址。

          然后通过循环对字符串的字符遍历,直到遇到\0就停止遍历。

          此时的指针变量和传入的参数的差值就是字符串的长度了。

          函数实现:

          

           上面为啥循环条件是对p进行解引用呢?那么因为字符串遍历中我们遇到\0就停止,然后我              们对其解引用刚刚好是0那么此时就可以停止循环了。

            函数测试:

                       

四、strcpy的使用和模拟实现 

          函数strcpy的作用的拷贝字符串,就是复制粘贴的功能,比如说我们现在要将数组arr2的字              符拷贝给数组arr1,那么我们就可以使用这个函数,使用其一样要记得包含头文件string.h,           下面我们看看函数的原型。

          char *strcpy(char * destination , const  char * source );

          函数解析:
          strcpy的第一个参数是我们要拷贝到的目的地的首地址,第二个参数是我们要拷贝的对象,            然后其返回值是接收这个拷贝的目标地址。

          下面为strcpy函数的要求:

           源字符串必须以"\0"结束

           其会将源字符串的"\0"也拷贝至目标空间

           目标空间必须要足够大,能够存放源字符串。

           然后目标空间的内容要是可以修改的。

           为了更好模拟实现strcpy函数,下面我们使用其看看其效果:

           

           可以看到我们将str2字符串的内容拷贝到了str1。

           下面我们来模拟实现其功能:

            函数名:my_strcpy

            参数:第一个字符指针接收目标空间的首地址,第二个接收要拷贝的字符串的首地址。

            函数实现分析:

            和前面的strlen函数实现一样,由于参数都是指针参数,我们可以在开始先使用断言,注意              使用断言要包含头文件assert.h。

            然后因为要返回目标空间的初始地址,那么我们就创建一个指针变量存放目标空间的首地              址 ,在最后返回这个地址。

            然后我们遍历要拷贝的字符串,对其解引用,然后赋值给目标空间的对应位置,没赋值一              次后对目标空间的字符串的地址和拷贝的字符串都进行+1操作,然后直到要拷贝的字符串              遇到\0,但是注意的是这个\0也要拷贝到目标空间,那么我们可以将循环的条件变成                        *str1=*str2,那么此时当要被拷贝的字符串的\0赋值给目标空间后,循环也结束。

            代码如下:

            

               运行结果:

                

五、strcat函数的使用与模拟

           strcat函数的功能是追加字符串,将一个字符串的内容追加到另一个字符串的末尾处,其使             用要包含头文件string.h。

          下面我们看看strcat函数的原型:

          strcat(char *str1,char*str2);

          可以看到其参数和strcpy函数一样,也是两个字符指针,其就是将第二个参数追加至第一个            参数的字符串,且其返回值也是被追加的字符串的首地址。

          下面是strcat函数一些要求:

           源字符串必须要以\0结束

           目标字符串也要有\0字符,因为追加是在\0的位置开始追加。

           被追加的空间要足够大,能够容纳追加的源字符串的内容。

           被追加的空间要能够给修改。

           下面我们来模拟实现strcat函数:

           和前面的一样,这里的函数的参数是两个指针变量,那么我们开始对其断言一下。

            然后我们思考一下如何追加,我们是将第二个字符串追加到\0的后面么,很明显,我们是                在被追加的字符串的\0的位置开始追加。

            那么我们追加前,先将被追加的字符串移动至\0的位置,然后开始追加。

            由于要返回的是被追加的字符串的首地址,那么我们在开始的时候创建一个字符指针变量              存放被追加字符串的首地址。

           代码实现:

           

             运行结果:

              

六、strcmp的使用和模拟实现 

           strcmp是用来比较两个字符串大小的,其比较的依据是字符的acsll码值,其使用也要包含              头文件string.h。

           下面我们看看其函数原型:

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

           可以看到其两个参数就是我们要比较的两个字符串的地址,然后其返回类型为整型,其就               是如果前一个字符串大于后一个字符串,那么其就返回一个大于0的数,反之就返回一个小             于0的数。

           下面是strcmp函数的一些特点:

            第一个字符串大于第二个字符串则返回大于0的数。

            第二个字符串大于第一个字符串则返回小于0的数。

           两个字符串如果相等则返回0。

           其比较的对应位置上的字符的acsll码值。

           下面我们使用其感受一下:

           

              下面我们模拟实现strcmp函数:

              函数实现分析:

              和前面一样由于参数是两个指针,所以我们开始对其断言一下。

              我们可以使用一个while循环,循环条件就是两个字符串对应位置的字符是否一样马,如                  果一样那么就继续往后面的位置找,直到说其中一个字符串到了\0的位置,此时两个字符                串的大小就是相等的,此时返回0,最后返回的值就用第一个字符串的值和第二个字符串                的值做差,那么大于0的数就是第一个字符串大,反之。

              函数实现:

               

              运行结果:
              

          感谢哥哥姐姐们的阅读,有不对的地方请指正!!! 

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

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

相关文章

【Python LeetCode 专题】动态规划

斐波那契类型70. 爬楼梯746. 使用最小花费爬楼梯198. 打家劫舍740. 删除并获得点数矩阵62. 不同路径方法一:二维 DP方法二:递归(`@cache`)64. 最小路径和63. 不同路径 II120. 三角形最小路径和221. 最大正方形字符串139. 单词拆分5. 最长回文子串516. 最长回文子序列72. 编…

Linux相关知识(文件系统、目录树、权限管理)和Shell相关知识(字符串、数组)

仅供自学&#xff0c;请去支持javaGuide原版书籍。 1.Linux 1.1.概述 Linux是一种类Unix系统。 严格来讲&#xff0c;Linux 这个词本身只表示 Linux内核&#xff0c;单独的 Linux 内核并不能成为一个可以正常工作的操作系统。所以&#xff0c;就有了各种 Linux 发行版&#…

第九节: Vue 3 中的 provide 与 inject:优雅的跨组件通信

文章目录 前言什么是 provide 和 inject&#xff1f;provide 的基本使用inject 的基本使用provide 提供响应式数据数据provide 提供修改数据的方法provide 提供只读响应数据provide 使用symbol作为注入名inject 默认值总结 前言 在 Vue 3 中&#xff0c;provide 和 inject 是一…

prometheus+node_exporter+grafana监控K8S信息

prometheusnode_exportergrafana监控K8S 1.prometheus部署2.node_exporter部署3.修改prometheus配置文件4.grafana部署 1.prometheus部署 包下载地址&#xff1a;https://prometheus.io/download/ 将包传至/opt 解压 tar xf prometheus-2.53.3.linux-amd64.tar.gz 移动到…

C/C++流星雨

系列文章 序号直达链接1C/C李峋同款跳动的爱心2C/C跳动的爱心3C/C经典爱心4C/C满屏飘字5C/C大雪纷飞6C/C炫酷烟花7C/C黑客帝国同款字母雨8C/C樱花树9C/C奥特曼10C/C精美圣诞树11C/C俄罗斯方块小游戏12C/C贪吃蛇小游戏13C/C孤单又灿烂的神14C/C闪烁的爱心15C/C哆啦A梦16C/C简单…

理解 MHA、GQA、MQA 和 MLA:多头注意力的变种及其应用

在深度学习、自然语言处理&#xff08;NLP&#xff09;和计算机视觉&#xff08;CV&#xff09;中&#xff0c;多头注意力&#xff08;Multi-Head Attention, MHA&#xff09;是 Transformer 结构的核心。近年来&#xff0c;MHA 产生了多个变体&#xff0c;如 GQA&#xff08;G…

Crack SmartGit

感谢大佬提供的资源 一、正常安装SmartGit 二、下载crackSmartGit crackSmartGit 发行版 - Gitee.com 三、使用crackSmartGit 1. 打开用户目录&#xff1a;C:\Users%用户名%\AppData\Roaming\syntevo\SmartGit。将crackSmartGit.jar和license.zip拷贝至 用户目录。 2. 用户…

将CUBE或3DL LUT转换为PNG图像

概述 在大部分情况下&#xff0c;LUT 文件通常为 CUBE 或 3DL 格式。但是我们在 OpenGL Shader 中使用的LUT&#xff0c;通常是图像格式的 LUT 文件。下面&#xff0c;我将教大家如何将这些文件转换为 PNG 图像格式。 条形LUT在线转换&#xff08;不是8x8网络&#xff09;&am…

关于命令行下的 git( git add、git commit、git push)

文章目录 关于 gitgit 的概念git 操作&#xff08;git add、git commit、git push 三板斧&#xff09;安装 git新建仓库及配置git clone.gitignoregit addgit commitgit push其他 git 指令git pull&#xff08;把远端的东西拉到本地进行同步&#xff09;其他指令 关于 git git…

一文讲解Redis中的数据一致性问题

一文讲解Redis中的数据一致性问题 在技术派实战项目中&#xff0c;我们采用的是先写 MySQL&#xff0c;再删除 Redis 的方式来保证缓存和数据库的数据一致性。 我举例说明一下。 对于第一次查询&#xff0c;请求 B 查询到的缓存数据是 10&#xff0c;但 MySQL 被请求 A 更新为…

论文笔记(七十二)Reward Centering(五)

Reward Centering&#xff08;五&#xff09; 文章概括摘要附录B 理论细节C 实验细节D 相关方法的联系 文章概括 引用&#xff1a; article{naik2024reward,title{Reward Centering},author{Naik, Abhishek and Wan, Yi and Tomar, Manan and Sutton, Richard S},journal{arX…

使用 Python 进行批量解压 .rar 文件

在进行解压 .rar 文件之前&#xff0c;需要进行下载外部工具包&#xff0c;参考以下地址&#xff1a; WinRAR archiver, a powerful tool to process RAR and ZIP filesWinRAR is a Windows data compression tool that focuses on the RAR and ZIP data compression formats …

夜莺监控 - 边缘告警引擎架构详解

前言 夜莺类似 Grafana 可以接入多个数据源&#xff0c;查询数据源的数据做告警和展示。但是有些数据源所在的机房和中心机房之间网络链路不好&#xff0c;如果由 n9e 进程去周期性查询数据并判定告警&#xff0c;那在网络链路抖动或拥塞的时候&#xff0c;告警就不稳定了。所…

Apache DolphinScheduler系列1-单节点部署及测试报告

文章目录 整体说明一、部署环境二、版本号三、部署方案四、部署步骤4.1、上传部署包4.2、创建外部数据库4.3、修改元数据库配置4.4、上传MySQLl驱动程序4.5、初始化外部数据库4.6、启停服务4.7、访问页面五、常见问题及解决方式5.1、时间不一致5.2、异常终止5.3、大量日志5.4、…

CNN 卷积神经网络

前置基础知识 convolution operator 卷积运算 输入矩阵循环取子矩阵跟filter(kernal)按位乘后加和作为输出矩阵对应位置的值。 convolution与cross correlation 上面操作实际是cross correlation操作&#xff0c;两者之间的唯一区别是卷积操作需要在开始计算之前将卷积核进行…

docker部署go简单web项目(无mysql等附加功能)

首先准备好go语言代码 代码表示当访问主机上8080端口下的/hello路径时&#xff0c;会返回hello&#xff0c;world。 package mainimport ("fmt""github.com/gin-gonic/gin" )type hh struct {S string }func main() {router : gin.Default()router.GET(&…

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

1.字符函数 在 C 语言中&#xff0c;字符分类函数主要定义在<ctype.h>头文件中&#xff0c;这些函数可以用来判断一个字符是否属于特定的字符类别&#xff0c;下面为你详细介绍一些常用的字符分类函数&#xff1a; 1.1 iscntrl 功能&#xff1a;判断一个字符是否为控制…

全域旅游景区导览系统:赋能智慧旅游生态,破解行业核心难题

全域旅游景区导览系统&#xff1a;赋能智慧旅游生态&#xff0c;破解行业核心难题 ——整合旅游商城、非遗文化与全域服务的一站式解决方案 一、行业痛点&#xff1a;传统旅游服务模式的局限性 随着旅游业从单一景区游览向“全域旅游”转型&#xff0c;传统服务模式暴露出诸多…

SQL笔记#集合运算

目录 一、表的加减法 1、什么是集合运算 2、表的加法——UNION 3、集合运算的注意事项 4、包含重复行的集合运算——ALL运算 5、选取表中公共部分——INTERSECT 6、记录的减法——EXCEPT 二、联结(以列为单位对表进行联结) 1、什么是联结(JOIN) 2、内联结——INSER…

基于C++“简单且有效”的“数据库连接池”

前言 数据库连接池在开发中应该是很常用的一个组件&#xff0c;他可以很好的节省连接数据库的时间开销&#xff1b;本文基使用C实现了一个简单的数据库连接池&#xff0c;代码量只有400行只有&#xff0c;但是压力测试效果很好&#xff1b;欢迎收藏 关注&#xff0c;本人将会…