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

ops/2025/2/26 22:34:45/

一、字符分类函数

          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.ppmy.cn/ops/161520.html

相关文章

比较RPC和RESTful API的优缺点

RPC和RESTful API是两种不同的远程调用方式&#xff0c;它们各自具有不同的优缺点。 RPC的优点包括&#xff1a; 高效&#xff1a;RPC使用自定义的通信协议&#xff0c;可以减少报文传输量&#xff0c;提高传输效率。灵活&#xff1a;RPC支持多种语言&#xff0c;不同的编程语…

DeepSeek 点燃关键技术突破的科技引擎,驶向未来新航道

在当今数字化浪潮汹涌澎湃的时代&#xff0c;人工智能&#xff08;AI&#xff09;技术宛如闪耀的灯塔&#xff0c;照亮了科技发展的漫漫征途。从智能家居的便捷体验&#xff0c;到自动驾驶的前沿探索&#xff0c;从医疗诊断的精准辅助&#xff0c;到金融风控的智能决策&#xf…

PCI_PCIe子系统学习(一)概念理清

文章目录 1、其它学习文章2、PCI和PCIe总线简单介绍2.1、PCI2.2、PCIe 3、引脚概述3.1、PCI3.1.1、PCI引脚概述3.1.2、PCI引脚定义3.1.2.1、32位 PCI (124针)3.1.2.2、64位 PCI (188针) 3.1.3、PCI引脚功能分类 3.2、PCIe3.2.1、PCIe引脚概述3.2.2、PCIe引脚定义3.2.2.1、PCIe …

第2课 树莓派镜像的烧录

树莓派的系统通常是安装在SD卡上的‌。SD卡作为启动设备,负责启动树莓派并加载操作系统。这种设计使得树莓派具有便携性和灵活性,用户可以通过更换SD卡来更换操作系统或恢复出厂设置。 烧录树莓派的镜像即是将树莓派镜像烧录到SD卡上,在此期间会格式化SD卡,如果SD卡…

突破性能极限:DeepSeek开源FlashMLA解码内核技术解析

引言&#xff1a;大模型时代的推理加速革命 在生成式AI大行其道的今天&#xff0c;如何提升大语言模型的推理效率已成为行业焦点。DeepSeek团队最新开源的FlashMLA项目凭借其惊人的性能表现引发关注——在H800 GPU上实现580 TFLOPS计算性能&#xff0c;这正是大模型推理优化的…

AI客服-接入deepseek大模型到微信(本地部署deepseek集成微信自动收发消息)

1.本地部署 1.1 ollama Ollama软件通过其高度优化的推理引擎和先进的内存管理机制&#xff0c;显著提升了大型语言模型在本地设备上的运行效率。其核心采用了量化技术&#xff08;Quantization&#xff09;以降低模型的计算复杂度和存储需求&#xff0c;同时结合张量并行计算&…

java面试题(一年工作经验)的心得

看面试题 正常人第一步肯定都会看面试题&#xff0c;我也不例外&#xff0c;在看的过程中&#xff0c;我发现有些文章写的不错&#xff0c;对我帮助不小值得推荐&#xff0c;如下&#xff1a; Java面试题全集&#xff08;上&#xff09; 很多基础的东西&#xff0c;建议先看。…

Linux9-进程间通信-管道、信号

一、进程通信 同一主机进程间通信&#xff1a; 1.1无名管道 当前系统默认64K大小&#xff08;当管道满时&#xff0c;再写时按FIFO的方式存储&#xff0c;会发生写阻塞&#xff09; 用于同一主机下&#xff0c;具有亲缘关系的进程间通信。 1.创建一个管道并打开 int pipe(…