C语言————字符函数与字符串函数

       在编程的过程中,我们经常要处理字符和字符串,为了⽅便操作字符和字符串,C语⾔标准库中提供了⼀系列库函数,如追加,拷贝,替换等等接下来我们就学习⼀下这些函数,并且自实现。

gets

        这个指令大家可以与我们以前常用的scanf相比较,大家都知道scanf是输入。gets从名字上看就可以知道也是输入。那么大家可以想一下,既然我们有scanf了,为什么还要搞一个gets嘞。所以我们就来说明一下gets与scanf的区别。直接看代码

    大家可以看到我在gets和scanf输入都是hi yh。但是我们调试的时候两个数组存储的结果却不一样。所以gets与scanf异同是,在指令gets执行时,你输入说明东西都可以,想让这个指令停止的话用回车键。scanf也是。但是区别是录入东西的时候,gets可以录入空格,就算是\0的话也是可以的,但是scanf却不行,上面大家可以看到scanf只录入了空格前的数据。

总结:gets,录入输入的所有东西,包括空格,\0。但scanf可以输入任意东西,但是录入的东西只有\0之前的。

puts

      既然输入有两个那么输出也要有两个吧,不然会说,工程师一碗水端平吧。那么输出就是puts,那这个与printf有什么区别嘞?

      这里我只创建了一个char类型的数组,然后puts和printf打印的结果虽然是一样的,但是大家可以看到我写数据的时候,是不一样。puts我写的是数组名arr但printf是两个数据类型。这代表puts只可以打印字符串,不能格式化。但printf可以格式化,输出多种类型的结果。所以我们平常很少使用puts。

字符分类函数


       C语⾔中有⼀系列的函数是专⻔做字符分类的,也就是⼀个字符是属于什么类型的字符的。这些函数的使⽤都需要包含⼀个头⽂件是 ctype.h

这些函数的使用方法是一样的,那么我们就举一个例子,其他的其实就都会使用了。那么我们就写一个判断字符是否是小写字母

       我们可以看到我给字符a输入的是大写的a所以y的结果就是0.大家都知道0为假。那么大家可以知道这些函数如何使用了吧。

        然后大家看一下这个表,熟悉吧。虽然我们可能用不上全部,但是我们可以记住里面常用且简单的规律,如小写字母的ascll码整体大于大写字母32。0的ascll值为48,那么 48向后加一那么十进制的0就会加1。

        这里我们计算使用了,大小写字母相差32。然后我们还有一个库函数直接改写,大小写字母装换。

int tolower ( int c ); //将参数传进去的⼤写字⺟转⼩写
int toupper ( int c ); //将参数传进去的⼩写字⺟转⼤写

strlen

       这个大家应该不陌生吧。计算\0之前的个数。那么我们就直接写my_strlen。看代码

       这是我们使用递归的方法来计算的,还有两种方法,分别是遍历一遍然后在遍历的时候如果没有遇到\0,count就加加,直到遇到\0就结束并且返回值。

     然后是指针减指针。这个给大家解释一下,就是指针减指针的结果是两个指针之间的元素个数,然后我们就可以依据这个定理推断出第三中方法了

strcpy

        这个指令大家可能会比较陌生,但是我们在电脑上肯定使用的不少。它就是拷贝,如创建两个字符串数组,一个为替换数组另外一个被替换数组。并且被替换数组要有足够空间来接收替换数组的内容。接下来我们就先实现,然后再写my_strcpy。

     首先我们来一个正常版的:

     接下来就是我们自己的my_strcpy

strcat 

        这个嘞,就不是拷贝了,在C语言中代表的意思是追加。如贪吃蛇在尾部再添加一点数量的长度。C语言中代表的是追加另一个数组中的元素。当然你肯定要确定被追加的数组够大。还是老规矩先演示再my_strcat

       正常的使用方法:这里我也是为了方便直接用的上一个数值,所以有些注释没有删除

        接下来是my_strcat:

strcmp

       这个库函数就是我们日常生活中有使用过的,就是比较大小,如果前者大于后者那么就会返回一个大于0的数字,如果小于的话那么就是返回小于0的数字。比较方法的话就是利用ascll码值来对比。还是老规矩::

      正常使用strcmp

       这里大家看到了我用y来接收的返回值,打印出来的值是小于0的,那么数组arr小于数值arr1,大家可以看到这两个数组内容其实差不多的,但是只有最后一个字符不一样。所以strcmp对比是一个一个字符对比如果遇见字符相同的那么就跳到下一个字符,如果遇见可以判断大小的字符的时候,那么对比就结束了,后面的字符无论相差多少都没有关系了。并且我们知道小写字母a的ascll值为97,但是f的ascll为102。所以这里返回的就是-1。

      my_strcmp

  strncpy

       大家看到这个库函数是否会觉得有点熟悉呀,是不是感觉前面才见过啊。但大家需要仔细看一下,这个与strcpy可是多了一个n的呀,那么对于严谨的编程来说这肯定是有很大差别的,那具体是什么差别嘞,首先strncpy也是拷贝,但是strncpy可以控制拷贝的元素个数,例如下面的例子,我们只想拷贝前五个元素,其他的我觉得不重要,那么就我使用strncpy。因为如果我们使用strcpy的话就全部拷贝了。

       正常使用strncpy:我们可以看到我创建两个数组,并且拷贝元素个数在原目标数组上是有足够元素的,但如果源字符串的⻓度⼩于num,则拷⻉完源字符串之后,在⽬标的后边追加0,直到num个。

       my_strncpy

strncat

       既然学习过了上面的stcncpy,那么strncat是不是也可以理解的差不多了呀。strncat代表的意思是追加n个字符。n肯定是自己确定嘛。

       正常使用strncat:这里大家可以看到我们将最佳7个元素,但是arr1没有那么多的元素啊,怎么办,那就只有用\0来代替了。但是因为数组arr本身没有完全赋值,所以其他的都是用\0来代替的,所以编译器没有用红色来标注出来。

       my_strncat:

strncmp

        还是熟悉的味道,又加了一个n,那么这个就是对比n个元素,然后返回大小值了。

        正常的strncmp:

        my_strncmp:

 strstr

        这个库函数就是来确定一个数组在另外一个数组中是否存在,如果存在的话,那么就返回在数组中的出现的地方。虽然大家觉得这个库函数没什么作用呀。但其实在一些大厂的面试题中有确定是否是这个数组中的。

        正常的strstr:这里大家可以看到我们使用的是,看simple是否存在str里面,然后用pch来接收的,然后我们打印。

        my_strstr:

strtok

        这个库函数就是分割相当于,在第一个字符串中有0个或者多个由sep字符串中⼀个或者多个分隔符分割的标记。该函数返回被分解的第一个子字符串,若无可检索的字符串,则返回空指针。strtok函数的第⼀个参数为 NULL ,函数将在同⼀个字符串中被保存的位置开始,查找下⼀个标
记。

       正常strtok:大家可以借鉴这个示例,虽然这个库函数使用的相对较少,但我们还是需要了解使用方法的。

       my_strtok:

strerror

        这个库函数嘞,我觉得就不用写模拟实现了,比较这个本来就是方便我们使用者的,要是再自己写一个的话,就太麻烦了,这个库函数,我就直接写使用方法了吧。而且这个库函数的作用是返回一个指向错误字符串的指针,该错误字符串描述了错误 errnum。相当于告诉我们有什么错误,错误是什么。

      这里的错误我就不给大家翻译了,大家如果感兴趣的话,可以自己去翻译一下。
 

       那么这些是鄙人今天想与大家分享的知识点了,当然还有一些知识点是没有写出来的,希望大家可以在评论区写出来,方便鄙人改正。

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

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

相关文章

十七、enumerate函数的用法

enumerate() 函数是 Python 内置函数之一,用于同时返回可迭代对象的索引和对应的值。 它的语法结构如下: enumerate(iterable, start0) iterable: 表示一个可迭代的对象,如列表、元组、字符串等。start: 可选参数,表示索引起始…

校招春招秋招,HR是如何筛选简历的?

一份简历在HR的眼中最多能停留15秒钟。 如果15秒内HR没有决定要通知你做在线测评,那么这事就算过去了。 那么问题来了,如果在15秒内,让HR对你产生兴趣? 1、简历布局 人在浏览信息的时候,习惯性的是从上往下&…

The display: inline property prevents width from having an effect.

The display: inline property prevents width from having an effect. Try setting display to something other than inline. ---------------------------------- display: inline 不支持元素的 width 或 height 属性,若要元素 width 或 height 生效,…

全网上线 IP 归属地功能,一文教你如何实现

细心的朋友们可能已经发现了,先在抖音、知乎、快手、小红书等这些平台已经上线了“网络用户显示 IP 的功能”,境外用户显示的是国家,国内的用户显示的省份,而且此项显示无法关闭,归属地强制显示。 1获取用户 IP 地址 …

LLM 推理优化探微 (2) :Transformer 模型 KV 缓存技术详解

编者按:随着 LLM 赋能越来越多需要实时决策和响应的应用场景,以及用户体验不佳、成本过高、资源受限等问题的出现,大模型高效推理已成为一个重要的研究课题。为此,Baihai IDP 推出 Pierre Lienhart 的系列文章,从多个维…

企业如何安全参与开源项目?

【开源三句半】 企业参与开源潮, 安全创新都重要, 持续投入不可少, 眼光独到。 开源已经成为构建现代软件的常见方式,这不仅局限于IT技术本身,更推动了多个行业的数字化发展。企业决定引入开源项目打造商业软件时&…

简介:基于 OpenTiny 组件库的 rendereless 无渲染组件架构

在 HAE 自研阶段,我们实现的数据双向绑定、面向对象的 JS 库、配置式开发的注册表等特性,随着前端技术的高速发展现在已经失去存在的意义,但是在 AUI 阶段探索的新思路新架构,经过大量的业务落地验证,再次推动前端领域…

mmap匿名映射区

在创建映射区时,我们创建了一个文件,后面又需要unlink删除,然后munmap释放内存映射区,所以一开始就没必要创建。匿名映射区是指创建的映射区域不与任何文件关联,而是由操作系统分配的匿名内存。 mmap 内存映射里所谓的…

启发式算法:模拟退火算法

文章目录 退火的含义算法概述Metroplis准则算例-旅行商TSP问题退火的含义 退火(annealing)现象指物体逐渐降温的物理现象,温度愈低,物体的能量状态会低;够低之后,液体开始冷凝与结晶,在结晶状态时,系统的能量状态最低。大自然在缓慢降温(亦即,退火)时,可“找到”最…

空间复杂度的OJ练习——轮转数组

旋转数组OJ链接:https://leetcode-cn.com/problems/rotate-array/ 题目: 思路: 通过题目我们可以知道这是一个无序数组,只需要将数组中的数按给定条件重新排列,因此我们可以想到以下几种方法: 1.暴力求解法…

C语言字符数组的输入与输出的详细说明

前记:由于c面向过程编程语言,不像C和java等面向对象的编程语言,没有string类。 只能凭借数组存储字符串。接下来是关于c语言的字符数组的输入输出的详细说明! 一,输入函数 1.scanf() scanf这种格式串不能接收带空格的字…

HTML 学习笔记(一)开始

一、介绍: 首先引用百度百科的一段话作为介绍:   HTML的全称为超文本标记语言,是一种标记语言。它包括一系列标签,通过这些标签可以将网络上的文档格式统一,使分散的Internet资源连接为一个逻辑整体。HTML文本是由HTML命令组成的描述性文本…

Qt QPainter的使用方法

重点: 1.QPainter在QWidget窗口的paintEvent中使用。 2.QPainter通常涉及到设置画笔、设置画刷、绘图(QPen、QBrush、drawxx)三个流程。 class Widget : public QWidget {Q_OBJECTprotected:void paintEvent(QPaintEvent *event) Q_DEC…

React组件(函数式组件,类式组件)

函数式组件 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>React Demo</title> <!-- 引…

seo蜘蛛池的概念!蚂蚁SEO

蜘蛛池是一种特殊的网络营销技术&#xff0c;它的主要作用是吸引搜索引擎爬虫&#xff0c;提高网站的收录和排名&#xff0c;从而增加网站的流量和曝光度。 蚂蚁SEO是一个SEO工具&#xff0c;可以帮助您提高网站权重&#xff0c;吸引更多的搜索引擎爬虫&#xff0c;提高网站的…

6. Gin集成redis

文章目录 一&#xff1a;连接Redis二&#xff1a;基本使用三&#xff1a;字符串四&#xff1a;列表五&#xff1a;哈希六&#xff1a;Set七&#xff1a;管道八、事务九&#xff1a;示例 代码地址&#xff1a;https://gitee.com/lymgoforIT/golang-trick/tree/master/14-go-redi…

Linux多线程之线程控制

(&#xff61;&#xff65;∀&#xff65;)&#xff89;&#xff9e;嗨&#xff01;你好这里是ky233的主页&#xff1a;这里是ky233的主页&#xff0c;欢迎光临~https://blog.csdn.net/ky233?typeblog 点个关注不迷路⌯▾⌯ 目录 一、pthread_crate 二、pthread_join 三、p…

腾讯面经学习笔记

&#x1f496; 前言 &#x1f469;‍&#x1f3eb; 参考地址 &#x1f496; 操作系统 1. 进程和线程的区别 本质区别 进程是操作系统资源分配的基本单位线程是任务调度和执行的基本单位 开销方面 每个进程都有独立的代码和数据空间&#xff08;程序上下文&#xff09;&#…

使用大型语言模型进行实体提取

原文地址&#xff1a;Using A Large Language Model For Entity Extraction LLM 能否比传统 NLP 方法更好地提取实体&#xff1f; 2022 年 7 月 12 日 Large Language Models for Generative Information Extraction: A Survey 实体简介 使用Co:here大型语言模型。 实体可以被视…

pytorch_retinaface训练Resnet50_Final.pth过程+无图版安装Nvidia+CUDA驱动GPU

背景 当前处于人脸检测分支&#xff0c;项目就是retinaface官方的代码加上数据集目录结构&#xff0c;目的是训练出最后的模型文件Resnet50_Final.pth 代码 https://gitee.com/congminglst/pytorch_-retinaface.git 项目结构与设计 图片数据集采用widerface&#xff0c; 前…