【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的数就是第一个字符串大,反之。

              函数实现:

               

              运行结果:
              

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

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

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

相关文章

网络安全 机器学习算法 计算机网络安全机制

&#xff08;一&#xff09;网络操作系统 安全 网络操作系统安全是整个网络系统安全的基础。操作系统安全机制主要包括访问控制和隔离控制。 访问控制系统一般包括主体、客体和安全访问政策 访问控制类型&#xff1a; 自主访问控制强制访问控制 访问控制措施&#xff1a; 入…

企业级大模型应用的Java-Python异构融合架构实践

一、后端语言相关技术生态 Python语言 Python在AI计算领域拥有全面的生态支持&#xff1a; 底层工具库: Pandas、NumPy、SciPy、Matplotlib深度学习框架: PyTorch、TensorFlow领域专用框架: HuggingFace Transformers&#xff08;社区生态为主&#xff09; 常见Python框架 …

Apache Doris 索引的全面剖析与使用指南

搞大数据开发的都知道&#xff0c;想要在海量数据里快速查数据&#xff0c;就像在星图里找一颗特定的星星&#xff0c;贼费劲。不过别慌&#xff0c;数据库索引就是咱们的 “定位神器”&#xff0c;能让查询效率直接起飞&#xff01;就拿 Apache Doris 这个超火的分析型数据库来…

HTTP/HTTPS 服务端口监测的简易实现

一 HTTP/HTTPS 服务端口监测的简易实现方法 在当今快节奏的工作环境中&#xff0c;工作忙碌成为了许多职场人的常态。就拿我们团队最近经历的事情来说&#xff0c;工作任务一个接一个&#xff0c;大家都在各自的岗位上争分夺秒地忙碌着。然而&#xff0c;就在这样高强度的工作…

基于数据可视化学习的卡路里消耗预测分析

数据分析实操集合&#xff1a; 1、关于房间传感器监测数据集的探索 2、EEMD-LSTM模型择时策略 — 1.EEMD分解与LSTM模型搭建 3、EEMD-LSTM模型择时策略 — 2. 量化回测 4、国际超市电商销售数据分析 5、基于问卷调查数据的多元统计数据分析与预测&#xff08;因子分析、对应分…

【初阶数据结构】链表的柔光之美

目录 一、为什么需要链表&#xff1f; 二、链表与数组的对比 三、链表节点定义 四、链表基本操作 1. 创建链表 2. 插入节点 头插法&#xff08;时间复杂度O(1)&#xff09; 尾插法&#xff08;时间复杂度O(n)&#xff09; 3. 删除节点 4. 遍历链表 五、进阶操作 1. 反…

计算机网络:应用层 —— 电子邮件

文章目录 电子邮件的起源与发展电子邮件的组成电子邮件协议邮件发送和接收过程邮件发送协议SMTP协议多用途因特网邮件扩展MIME 电子邮件的信息格式 邮件读取协议邮局协议POP因特网邮件访问协议IMAP 基于万维网的电子邮件 电子邮件&#xff08;E-mail&#xff09;是因特网上最早…

AWVS(web)扫描器安装与使用

目录 前言 1. AWVS 简介与功能特性 1.1 什么是 AWVS&#xff1f; 1.2 主要功能特性 2. AWVS 的安装步骤 2.1 系统要求 2.2 安装步骤&#xff08;以 Windows 为例&#xff09; 3. 配置与初始化 3.1 设置扫描目标 3.2 配置扫描选项 4. AWVS 的使用方法 4.1 自动扫描 …

opencv的C++遇到找不到opencv_worldxxxd.dll

如图所示&#xff1a; 将你缺的这个dll文件复制到 C:\Windows\System32 即可

AI提示工程的挑战与演进

目前让AI按照工作流正确的工作依然存在着提示挑战&#xff0c;提示工程实际上是一套逻辑严密的工作。 根据当前技术发展及行业实践&#xff0c;AI按照工作流正确执行任务仍面临显著的提示工程挑战&#xff0c;而提示工程本身也正在从零散经验向系统化、逻辑严密的方法论演进。以…

微信小程序-二维码绘制

wxml <view bindlongtap"saveQrcode"><!-- 二维码 --><view style"position: absolute;background-color: #FFFAEC;width: 100%;height: 100vh;"><canvas canvas-id"myQrcode" style"width: 200px; height: 200px;ba…

蓝桥杯第十六届嵌入式模拟编程题解析

由硬件框图可以知道我们要配置LED 和按键 LED 先配置LED的八个引脚为GPIO_OutPut&#xff0c;锁存器PD2也是&#xff0c;然后都设置为起始高电平&#xff0c;生成代码时还要去解决引脚冲突问题 按键 按键配置&#xff0c;由原理图按键所对引脚要GPIO_Input 生成代码&#xf…

电子科技大学考研复习经验分享

电子科技大学考研复习经验分享 本人情况&#xff1a;本科就读于电科软院&#xff0c;24年2月开始了解考研&#xff0c;24年3月开始数学&#xff0c;9月决定考本院&#xff08;开始全天候图书馆学习&#xff09;并开始专业课学习&#xff0c;11月底开始政治学习&#xff0c;最后…

基于范围选择的进化多目标优化PESA-II-可用于(汽车发动机多目标优化设计/飞机机翼多目标外形优化/电动汽车充电设施布局优化)

基于范围选择的进化多目标优化 PESA-II&#xff08;Pareto Envelope-Based Selection Algorithm II&#xff09;是一种经典的多目标遗传算法&#xff0c;以下是对它的详细介绍&#xff1a;基于范围选择的进化多目标优化PESA-II-可用于&#xff08;汽车发动机多目标优化设计/飞机…

DeepSeek 提示词:基础结构

&#x1f9d1; 博主简介&#xff1a;CSDN博客专家&#xff0c;历代文学网&#xff08;PC端可以访问&#xff1a;https://literature.sinhy.com/#/?__c1000&#xff0c;移动端可微信小程序搜索“历代文学”&#xff09;总架构师&#xff0c;15年工作经验&#xff0c;精通Java编…

鹏哥c语言数组(初阶数组)

前言&#xff1a; 对应c语言视频54集 内容&#xff1a; 一维数组的创建 数组是一组相同元素的集合&#xff0c; 数组的创建方式 type_t就是数组的元素类型&#xff0c;const_n是一个常量表达式&#xff0c;用来指定数组的大小 c99标准之前的&#xff0c;数组的大小必须是…

Oracle 数据变化量查询

1. DBA_HIST_SEG_STAT可以看出对象的使用趋势&#xff0c;构造如下SQL查询出每个时间段内数据库对象的增长量 select c.SNAP_ID,to_char(c.END_INTERVAL_TIME, yyyy-mm-dd) SNAP_TIME,a.OWNER,a.OBJECT_NAME,a.OBJECT_TYPE,b.DB_BLOCK_CHANGES_DELTAfrom dba_objects a,(selec…

Language Models are Unsupervised Multitask Learners,GPT-2详细讲解

1542M1.542B15.42亿个 背景和动机 1.GPT-1在特定自然语言理解任务标注较少情况下&#xff0c;通过利用大量无标注数据&#xff0c;取得较强性能 2.BERT性能超越GPT-1&#xff0c;GPT-2通过构建更大数据集和模型&#xff0c;同时在zero-shot的多任务学习场景中展示不错性能 创…

ultralytics导出engine之后,用tensorrt c++ api加载报Serialization failed

一。问题复现 1.生成engine 在安装了ultralytics之后&#xff0c;或者直接用源码也一样。运行如下代码 (或者用命令行也行&#xff1a;yolo taskdetect modeexport model/home/kv183/tensorrt_starter/ultralytics-main/weights/yolov8s.pt formatengine &#xff09; from…

Milvus x DeepSeek 搭建低成本高精度 RAG 实战

为什么手握海量数据&#xff0c;却用不出真正的“智能”&#xff1f;要么 AI 模型学艺不精&#xff0c;答非所问&#xff1b;要么技术门槛太高&#xff0c;让普通开发者望而却步。现在&#xff0c;使用阿里云 Milvus 向量检索服务、DeepSeek 大模型和 PAI LangStudio 开发工具&…