当前位置: 首页 > news >正文

b2b官网seo/seo博客模板

b2b官网seo,seo博客模板,备案期间 需要关闭网站,华大基因 网站公司建设字符函数和字符串函数 为了方便操作字符和字符串 C语言标准库中提供了一系列库函数 接下来我们学习一下这些函数 字符分类函数 C语言提供了一系列用于字符分类的函数,这些函数定义在ctype.h头文件中。这些函数通常用于检查字符是否属于特定的类别,例如…

字符函数和字符串函数

为了方便操作字符和字符串 C语言标准库中提供了一系列库函数 接下来我们学习一下这些函数

字符分类函数

C语言提供了一系列用于字符分类的函数,这些函数定义在ctype.h头文件中。这些函数通常用于检查字符是否属于特定的类别,例如大写字母、小写字母、数字等。以下是一些常用的字符分类函数:

1.isalpha(int c): 检查字符c是否为字母(大写或小写)。

2.isupper(int c): 检查字符c是否为大写字母。

3.islower(int c): 检查字符c是否为小写字母。

4.isdigit(int c): 检查字符c是否为数字(0-9)。

5.isalnum(int c): 检查字符c是否为字母或数字。

6.isxdigit(int c): 检查字符c是否为十六进制数字(0-9,a-f,A-F)。

7.isspace(int c): 检查字符c是否为空白字符(例如空格、制表符、换行符等)。

8.ispunct(int c): 检查字符c是否为标点符号。

9.isgraph(int c): 检查字符c是否为图形字符(即非空格字符)。

10.isprint(int c): 检查字符c是否为可打印字符(包括图形字符和空格字符)。

11.iscntrl(int c): 检查字符c是否为控制字符(例如回车符、换行符等)。

这些函数通常接受一个int类型的参数,这是因为char类型在C语言中实际上是一个小的int类型。如果字符属于指定的类别  这些函数返回一个非零值(通常是1) 否则返回0。

这些函数的使⽤⽅法⾮常类似,我们就讲解⼀个函数的事情,其他的⾮常类似:

比如 函数islower 如果它的参数是小写字母 就返回非0的整数 如果不是小写字母 就返回0

练习:

写⼀个代码,将字符串中的⼩写字⺟转⼤写,其他字符不变。

当然我们没学上述字符分类函数也能做出来 只需要让小写字母-32即可

现在我们用字符分类函数来做

字符转换函数

C语⾔提供了2个字符转换函数: 

int tolower(int c);//将参数传进去的大写字母转小写

int toupper(int c);//将参数传进去的小写字母转大写

之前的代码,我们将⼩写转⼤写,是-32完成的效果,有了转换函数,就可以直接使⽤ tolower函数。

长度不受限制的字符串函数

strlen的使用和模拟实现

函数原型:

字符串以'\0'作为结束标志,strlen函数返回的是在字符串中'\0'前⾯出现的字符个数(不包含'\0' )。

参数指向的字符串必须要以 '\0' 结束。

strlen的使⽤需要包含头⽂件#include<string.h> 

注意函数的返回值为 size_t,是⽆符号的(易错)

两个size_t(无符号的数)相减得到的结果仍然为无符号数 所以输出>

我们要是强转为int类型 即可得到想要的答案

学会strlen函数的模拟实现 

我们在之前也有学过

1.计数器的方式

2.指针-指针的方式

3.递归的方式(不创建临时变量count)

my_strlen(abcdedg)

1+my_strlen(bcdedg)

1+ (1+my_strlen(cdedg))

strcpy的使用和模拟实现

函数原型:

源字符串必须以 '\0' 结束。

会将源字符串中的 '\0' 拷⻉到⽬标空间。

⽬标空间必须⾜够⼤,以确保能存放源字符串。

⽬标空间必须可修改。(如果目标空间为常量字符串的时候 无法修改)

(如 char* arr2=xxxxxxxxx;)这里就无法修改目标空间arr2了

看下列代码:

接下来我们再给一段代码来看

看到调试的结果 我们就知道strcpy会将源字符串的’\0’拷贝到目标文件

strcpy模拟实现 

我们可以有一个更加简单的代码

我们模拟函数 尽可能去和原函数相像

strcat的使用和模拟实现

strcat函数的功能是拼接一个字符串到目标空间

函数原型:

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

⽬标字符串中也得有\0 ,否则没办法知道追加从哪⾥开始

⽬标空间必须有⾜够的⼤,能容纳下源字符串的内容

⽬标空间必须可修改

上代码:

strcat函数模拟实现

当然我们main函数内的my_strcat也可以修改一下  改成:

strcat可以在自己后面追加个自己吗

这里的while是死循环  造成越界访问 程序崩溃

因为这里的dest和src指针都指向arr1 当我们的dest找到了\0 后  此时src指向数组首元素 然后在dest所指的位置接上src位置上的字符   我们会发现src不会遇到\0  因为\0位置都被覆盖了 所以该循环是个死循环

如果遇到自己给自己追加 我们尽量不用strcat函数

strcmp的使用和模拟实现

函数原型:

标准规定:

第⼀个字符串⼤于第⼆个字符串,则返回⼤于0的数字

第⼀个字符串等于第⼆个字符串,则返回0

第⼀个字符串⼩于第⼆个字符串,则返回⼩于0的数字

那么如何判断两个字符串? ⽐较两个字符串中对应位置上字符ASCII码值的⼤⼩。

strcmp的使用

strcmp的模拟实现

当然我们也可以有另一种方式来比较字符串

这里的return *str1-*str2  当str1大于str2时就返回大于0的数

具体的数根据对应的字符的ASCII码的差值  这里的14就是q和c的ASCII码的差值

长度受限制的字符串函数

strncpy函数的使用

函数原型:

1.从源字符串拷贝num个字符到目标空间

2.如果源字符串的长度小于num  则拷贝完字符串之后 在目标的后边追加0  直到num个

当然如果我们这里的num值为8时 我们会在后面加两个’\0’来补空缺位置

strncat函数的使用

函数原型:

strncat函数的用途是将一个字符串(源字符串)的内容连接到另一个字符串(目标字符串)的末尾,但连接的字符数最多为指定的数量。

其中,destination(接下来用dest表示)是目标字符串,source(下面用src表示)是源字符串,num是要连接的字符数。

在连接过程中,strncat函数会检查src中的字符数。如果src中的字符数大于num,那么strncat只将src的前num个字符附加在dest末尾;如果src中的字符数小于num,那么strncat会将src的所有字符附加在dest末尾。

值得注意的是,dest需要有足够的空间来容纳要拷贝的字符串。另外,strncat函数会先将dest字符串最后的’\0’覆盖掉,然后在字符追加完成后,再追加’\0’。

注意:我们这边追加的’\0’和strncpy的补\0不一致 当然我们只要知道末尾会有\0就ok了

长度不受限制的字符串函数和长度受限制的字符串函数

长度受限制的字符串函数相对安全(并不是绝对安全)

例如上述代码 strcpy不会管会不会越界 会直接进行拷贝操作

strncmp的使用

函数原型:

比较str1和str2的前num个字符 如果相等就继续往后比较 最多比较num个字母 如果提前发现不一样 就提前结束 大的字符所在的字符串大于另外一个 如果num个字符都相等 就是相等 返回0

strstr的使用和模拟实现

函数原型:

在一个字符串中 查找另一个字符串

函数返回字符串str2在字符串str1中第一次出现的位置

字符串的比较匹配不包含\0字符  以\0作为结束标志

举例:

strstr的模拟实现

接下来我们来讲解在模拟实现中需要考虑的问题

1.最简单的情况

如str1=abcdef  str2=bcd

这里str1中并没有重复元素 当我们找到b 接着向下比较 直到找到str2的所有元素 最后输出bcdef

2.复杂情况(为什么需要cur指针)

如str1=abbbcdef  str2=bcd

这里就比较复杂了 当我们找到第一个b时 我们再向后找3个元素时 发现和str2不相等  如果没有cur指针指向移动前的所在位置(这里是第一个b所在位置) 此时s1已经指向str1中最后一个b 而s2指向str2中的d 这样我们就会导致无法正确查询在str1是否有和str2字符串相同的片段

3.如果str1=abc  str2=abc

这里我们知道字符串中有\0来结束 当s1和s2指向\0时 就已经结束了 如果接着向下搜寻 会导致越界访问 所以我的while循环里需要判断s1和s2是否为\0

4.注意这里的强制类型转换

这里有两种原因进行强制类型转换

首先是因为函数的返回值类型为char*

其次因为刚开始 我们设置成const char* 这样就无法对字符串进行操作了 这时强制类型转换是为了字符串的改变

5.特殊情况:当*cur找不到相同字符串时 即为空

strtok函数的使用

函数原型:

sep参数指向一个字符串 定义了用作分隔符的字符集合(该字符串是分隔符的集合)

第一个参数指向一个字符串 它包含了0个或者多个由sep字符串中一个或者多个分隔符分割的标记

strtok函数找到str中的下一个标记 并将其用\0结尾 返回一个指向这个标记的指针(注:strtok函数会改变被操作的字符串 所以被strtok函数切分的字符串一般都是临时拷贝的内容并且可修改)

strtok函数的第一个参数不为NULL  函数将找到str中第一个标记  strtok函数将保存它在字符串中的位置

strtok函数的第一个参数为NULL  函数将在同一个字符串中被保存的位置开始 查找下一个标记

如果字符串中不存在更多的标记 则返回NULL指针

接下来我们上代码来解释

strtok函数会把@和.变为\0  第一个参数为arr2(不为NULL)  函数保存第一个标记所在字符串中的位置 如果再次调用时 我们要传NULL  函数将在同一个字符中被保存的位置开始 查找下一标记

这里我们可能就会想 这函数这么复杂 有什么用 其实我们上述代码只是为了让大家理解该函数 接着我们上一个代码 让大家感受一下strtok函数

这里仅仅一个for循环就把我们之前写的那么多行代码给替换了 所以每个函数只要我们会用 它就是有用的 但该函数用的还是比较少 大家理解 掌握即可

strerror的使用

函数原型:

strerror函数可以把参数部分错误码对应的错误信息的字符串地址返回来

在不同的系统和C语言标准库的实现中都规定了一些错误码  一般是放在errno.h这个头文件中说明的  C语言程序启动的时候就会使用一个全局的变量errno来记录程序的当前错误码  只不过程序启动的时候errno是0  表示没有错误  当我们在使用标准库中的函数的时候发生了某种错误  就会将对应的错误码  存放在errno中 每一个错误码都有对应的错误信息的  strerror函数就可以将错误对应的错误信息字符串的地址返回

相关文章:

0基础 三个月掌握C语言(11)

字符函数和字符串函数 为了方便操作字符和字符串 C语言标准库中提供了一系列库函数 接下来我们学习一下这些函数 字符分类函数 C语言提供了一系列用于字符分类的函数&#xff0c;这些函数定义在ctype.h头文件中。这些函数通常用于检查字符是否属于特定的类别&#xff0c;例如…...

【Linux】基础 IO(文件描述符)-- 详解

一、前言 1、文件的宏观理解 文件在哪呢&#xff1f; 从广义上理解&#xff0c;键盘、显示器、网卡、声卡、显卡、磁盘等几乎所有的外设都可以称之为文件&#xff0c;因为 “Linux 下&#xff0c;一切皆文件”。 从狭义上的理解&#xff0c;文件在磁盘&#xff08;硬件&#…...

如何降低云计算成本?

降低云计算成本的方法有很多&#xff0c;以下是一些关键的策略和建议&#xff1a; 优化资源使用&#xff1a; 自动缩放&#xff1a;根据工作负载的需求自动调整计算资源的大小。对于不需要大量扩展的低优先级工作负载&#xff0c;可以设置性能限制&#xff0c;并在适当的情况下…...

C# 打开文件对话框(OpenFileDialog)

OpenFileDialog&#xff1a;可以打开指定后缀名的文件&#xff0c;既能单个打开文件也能批量打开文件 /// <summary>/// 批量打开文档/// 引用&#xff1a;System.Window.Fomrs.OpenFileDialog/// </summary>public void OpenFile(){OpenFileDialog dialog new Op…...

《LeetCode热题100》笔记题解思路技巧优化_Part_3

《LeetCode热题100》笔记&题解&思路&技巧&优化_Part_3 &#x1f60d;&#x1f60d;&#x1f60d; 相知&#x1f64c;&#x1f64c;&#x1f64c; 相识&#x1f622;&#x1f622;&#x1f622; 开始刷题链表&#x1f7e2;1. 相交链表&#x1f7e2;2. 反转链表&…...

Rocket MQ 从入门到实践

为什么要使用消息队列&#xff0c;解决什么问题&#xff1f;&#xff08;消峰、解藕、异步&#xff09; 消峰填谷 客户端》 网关 〉 消息队列》秒杀服务 异步解耦 消息队列中的重要概念理解。&#xff08;主题、消费组、队列&#xff0c;游标&#xff1f;&#xff09; 主题&…...

Vue中的Vnode虚拟Dom一文详解

VNode 是什么&#xff1f; VNode 是 Virtual Node 的缩写&#xff0c;它是 Vue.js 中用来描述真实 DOM 节点的对象。在 Vue 中&#xff0c;每个组件都会被渲染成一个 VNode 树&#xff0c;然后由虚拟 DOM 算法&#xff08;Virtual DOM Algorithm&#xff09;将其转化为真实的 …...

请求头content-type的类型有什么?

"Content-Type" 是 HTTP 请求头中的一个字段&#xff0c;用于指示发送给接收方的实体正文的媒体类型。常见的 "Content-Type" 类型包括但不限于以下几种&#xff1a; application/json&#xff1a; 用于指示请求或响应中的实体正文是 JSON 格式的数据。 ap…...

Javascript抓取京东、淘宝商品数据(商品采集商品详情图片抓取)

之前用的方法&#xff1a; let temp []var lists $(#J_goodsList li.gl-item)$.each(lists,function(idx,item){ temp.push({ id:$(item).data(sku), goods_img:$(item).find(img).attr(src), goods_name:$(item).find(.p-name em).text(), market_price:$(item).fi…...

Oracle 部署及基础使用

1. Oracle 简介 Oracle Database&#xff0c;又名 Oracle RDBMS&#xff0c;简称 Oracle Oracle系统&#xff0c;即是以Oracle关系数据库为数据存储和管理作为构架基础&#xff0c;构建出的数据库管理系统。是目前最流行的客户/服务器&#xff08;client/server&#xff09;或…...

ROS 语音交互(二)nlp

目录 背景&#xff1a; 一、模型选择 二、操作流程 三、核心代码展示 背景&#xff1a; 成功设置自己的知识库&#xff0c;语音交互问答会优先选择自己的知识库的答案进行回答&#xff0c;减少了耗时 一、模型选择 商汤 商量日日新 二、操作流程 文档中心 | 日日新开放…...

智慧公厕建设的主要目标是什么?

随着城市化进程的不断推进&#xff0c;公共厕所作为城市基础设施的重要组成部分&#xff0c;也变得越来越重要。为了提升公共厕所的管理水平、提供更好的服务质量&#xff0c;智慧公厕应运而生。智慧公厕的建设旨在通过信息化手段实现公共厕所的全面感知监测&#xff0c;实现公…...

常用芯片学习——BME280芯片

BME280 温湿度气压传感器 芯片介绍 BME280是基于成熟传感原理的组合数字湿度、压力和温度传感器。该传感器块采用极为紧凑的金属盖LGA封装&#xff0c;占地面积仅为2.5x2.5mm2&#xff0c;高度为0.93mm。该传感器提供I2C以及SPI接口。它的小尺寸和低功耗允许在电池驱动的设备…...

QT 状态机的使用

QT 状态机的使用场景&#xff1a; QT 状态机适用于需要管理复杂状态和状态转换的场景&#xff0c;例如游戏开发、UI界面控制、自动化控制系统等。它可以帮助组织和管理程序中的各种状态&#xff0c;并定义状态之间的转换规则&#xff0c;使程序逻辑清晰、易于维护。 QT 状态机…...

走进volatile的世界,探索它与可见性,有序性,原子性之间的爱恨情仇!

写在开头 在之前的几篇博文中&#xff0c;我们都提到了 volatile 关键字&#xff0c;这个单词中文释义为&#xff1a;不稳定的&#xff0c;易挥发的&#xff0c;在Java中代表变量修饰符&#xff0c;用来修饰会被不同线程访问和修改的变量&#xff0c;对于方法&#xff0c;代码…...

python从入门到精通(十五):python爬虫完整学习大纲

一、基础知识 爬虫的基本概念和工作原理。 HTTP 协议和网页结构。 Python 爬虫开发的基础库&#xff0c;如 requests、BeautifulSoup 等。 常见的反爬虫机制和应对方法。 二、爬虫逆向的技术 代理服务器和 IP 封锁突破。 用户代理和请求头模拟。 JavaScript 解析和执行。 验证码…...

为什么JDK8.0 之后允许接口定义静态方法和默认方法呢?

为什么JDK8.0 之后允许接口定义静态方法和默认方法呢&#xff1f; 因为它违反了接口作为一个抽象标准定义的概念。** 静态方法&#xff1a;因为之前的标准类库设计中&#xff0c;有很多Collection/Colletions或者Path/Paths这样成对的接口和类&#xff0c;后面的类中都是静态…...

如何通过生成式AI增强人类的创造力

如何通过生成式AI增强人类的创造力 概述&#xff1a; 生成式AI&#xff08;人工智能&#xff09;&#xff0c;能创建新的文本、图像和视频内容&#xff0c;不仅仍有成为取代许多工作岗位的潜力&#xff0c;但其最大的机遇在于增强人类创造力&#xff0c;助力商业和政府克服创新…...

力扣111---二叉树的最小深度(简单题,Java,递归+非递归)

目录 题目描述&#xff1a; &#xff08;递归&#xff09;代码&#xff1a; &#xff08;非递归、层次遍历&#xff09;代码&#xff1a; 题目描述&#xff1a; 给定一个二叉树&#xff0c;找出其最小深度。 最小深度是从根节点到最近叶子节点的最短路径上的节点数量。 说…...

C#处理文件

目录 1.管理文件2.管理驱动器3.管理目录4.管理路径5.获取文件信息6.控制如何处理文件 1.管理文件 C# 中使用 File 类可以进行文件的读取、写入和删除操作。File 类提供了多个静态方法来处理文件&#xff0c;如 File.Exists() 用于检查文件是否存在&#xff0c;File.ReadAllTex…...

git |常用命令

git 命令 非常常用 主流的仓库管理服务器&#xff0c;svn 和git 接下来&#xff0c;介绍git 操作&#xff08;自用 先讲一个简单的demo 流程 环境&#xff1a;centos、git #先创建一个本地 git 文件夹 mkdir test && cd ./test #写一个README.md #echo “# 张不大 的de…...

力扣100热题:两、三、四数之和,哈希+数组+双指针+排序

目录 一、两数之和 二、两数之和 II - 输入有序数组 三、两数之和 III - 数据结构设计 四、两数之和 IV - 输入 BST&#xff08;二叉搜索树&#xff09; 五、三数之和 六、四数之和 一、两数之和 题目&#xff1a;1. 两数之和 参考力扣题解&#xff1a;. - 力扣&#x…...

国外visa卡怎么办理,可充ChatGPTPLUS、Claude、Midjourney

很多小伙都在使用ChatGPT&#xff0c;但是想充值ChatGPTPLUS缺需要国外的visa卡&#xff0c;拿自己的银联卡&#xff0c;尝试了好多次还是不行&#xff0c;其实用一张国外的visa卡几分钟就可以升级好 办理国外visa卡&#xff0c;点击获取 国外的visa卡&#xff0c;具体要看你…...

【Web】记录[长城杯 2022 高校组]b4bycoffee题目复现

目录 前言 环境准备 简单分析 EXP 前言 本地jar包运行打通了&#xff0c;远程500&#xff0c;nss靶机有问题&#xff0c;换了bugku就可( 主要记录下做题过程&#xff0c;纯菜狗&#xff0c;小白文 环境准备 这次附件给的jar包是可执行jar&#xff0c;不是可依赖jar&…...

C++ 多路音频pcm混音算法

1、均值化混音算法 不适合商用&#xff0c;声音的损失比较大&#xff0c;不建议用&#xff0c;建议用第二种声音混音 short remix(short pcm1,short pcm2){ int value pcm1 pcm2; return (short)(value/2) } 2、归一化混音算法 输入数据为48Khz-2-16bit音频数据 方法&#…...

Golang 泛型定义类型的时候前面 ~ 代表什么意思

先看代码&#xff0c;定义一个简单的泛型 c1 里面一个 int &#xff0c;定义一个函数goods 下面 main函数进行调用, 如果直接传int 类型是不会报错的,但是如果传自定义类型的b就会报错。 type c1 interface {int }func goods[T c1](a T) {fmt.Println(a) }type myint intfunc …...

泽众云真机-机型支持ADB调试功能即将上线

最近云真机平台在线客服&#xff0c;收到很多咨询关于ADB调试功能&#xff0c;什么时候能更新&#xff1f;据小编所知&#xff0c;正在升级之中&#xff0c;有一块专门为了解决ADB调试功能提前准备&#xff0c;升级网络硬件设备&#xff0c;目前平台的功能已开发完成&#xff0…...

基于springboot的购物商城管理系统

1.项目简介 1.1 用户简介 用户主要分为管理员和用户端&#xff1a; 管理员&#xff1a; 管理员可以对后台数据进行管理、拥有最高权限、具体权限有登录后进行首页轮播图的配置管理、商品的配置、新品家具商城的配置管理、、家具商城分类管理配置、家具商城详情商品管理、用户…...

uni-app开发特点和开发流程

uni-app是一个基于Vue.js框架的跨平台应用开发框架&#xff0c;通过一套代码可以同时运行在多个平台上&#xff0c;包括iOS、Android、H5等。它采用了基于流布局的页面渲染机制&#xff0c;可以自动适配不同平台的屏幕尺寸和分辨率。uniapp官网&#xff1a;https://uniapp.dclo…...

Sentinel篇:线程隔离和熔断降级

书接上回&#xff1a;微服务&#xff1a;Sentinel篇 3. 隔离和降级 限流是一种预防措施&#xff0c;虽然限流可以尽量避免因高并发而引起的服务故障&#xff0c;但服务还会因为其它原因而故障。 而要将这些故障控制在一定范围&#xff0c;避免雪崩&#xff0c;就要靠线程隔离…...