【C++】string 之 find、rfind、replace、compare函数的学习

前言

上篇文章,我们学习了assign、at、append这三个函数

今天,我们来学习find、 函数

find函数

引入

我们都知道,find函数可以是string类中,用于查找字符或者字符串的函数
也可以是,<algorithm>头文件中,的一种算法,用于在任何容器中,查找想要的元素,这个用法以后再说,下文只学习find函数是如何在字符串中查找字符的

函数形式

size_t find(const string& str, size_t pos = 0)const;
size_t find(const char* s, size_t pos = 0)const;
size_t find(const char* s, size_t pos, size_t n)const;
size_t find(char c, size_t pos = 0)const;

使用方式

str.find("xx");

str是要查找的字符串、xx是要查找的内容

返回值

如果查找成功,find()函数返回子串或字符在字符串中第一次出现的位置,字符串第一个字符下标是0;否则,返回一个特殊值string::npos表示查找失败

在C++中,npos是一个特殊的无符号整数值,表示一个不可能的位置或大小。它的值是最大的可能大小,即size_t(-1)
要是转换成有符号整型输出,结果就是-1

使用例子

下面给出一个例子,方便大家理解

#include<iostream>
#include<string>using namespace std;int main()
{string str = "hello,world";cout << str.find("world") << endl;cout << str.find("w") << endl;cout << str.find("a") << endl;cout << (int)str.find("a") << endl;return 0;
}

运行结果:
在这里插入图片描述

注意:
find函数只能查找子串在字符串中第一次出现的位置,如果想多次查找,可以通过循环结构和改变find函数的第二个参数起始位置:pos(pos默认为0,即第一个元素)来实现

rfind函数

接下来,我们来学习rfind函数,
rfind函数和find函数很像,只不过find函数是从第一个元素开始查找,rfind函数是从最后一个

逆向查找字符或字符串,若查找成功,则返回逆向查到的第一个字符下标或第一个字符串首字符的下标;若查找失败,无法返回正确的下标。
逆向查到的第一个字符或第一个字符串也就是正向的最后一个。rfind()函数的返回值为无符号整数类型。

replace函数

不做详细介绍 只介绍一下它的基本功能和给出一个使用示例

replace虽然使用的时候有一些局限性(即不能超出原字符串的大小) 但功能还是很多的

基本功能

replace意思是替换 即将字符串中的某些字符替换成其他的字符

语法格式

用法一:

三个参数:
第一个是下标pos 寻找的字符的位置
第二个是整型数据n 即从pos开始向后修改几个字符
第三个是字符串str1

这种用法就是:
将pos后面n个字符修改为str1中的字符

也可以理解为
replace函数先将pos后的n个字符截取掉
再将str1放在pos后面

#include<iostream>using namespace std;int main()
{string str = "Hello World";str = str.replace(str.find("o"), 2, "X");cout << str << endl;str = "Hello World";str = str.replace(str.find("o"), 1, "XXXX");cout << str << endl;str = "Hello World";str = str.replace(str.find("o"), 2, "XXXX");cout << str << endl;return 0;
}

运行结果:
在这里插入图片描述

用法二:

三个参数:
起始位置pos1,即从pos1开始替换
终止位置pos2,到pos2停止替换
字符串str1,用str1进行替换

这种用法:
从pos1到pos2的所有字符,替换成字符串str1

下面给出一个例子:

#include<iostream>using namespace std;int main()
{string str = "Hello world";str = str.replace(str.begin(), str.begin() + 3, "hddddddd");cout << str;return 0;
}

运行结果:
在这里插入图片描述

用法三:

五个参数:
pos1,原字符串的起始替换位置
pos2,原字符串的替换终止位置
str1,要替换的字符串
pos3,str1的起始位置
n,从pos3开始替换n个字符

这种用法就是将原字符串中从pos1到pos2的所有字符替换成str1中从pos3开始的n个字符

下面给出一个例子:

#include<iostream>using namespace std;int main()
{string str = "Hello world";string str1 = "nice to meet you";str = str.replace(0, 3, str1, str1.find("c"), 3);cout << str << endl;return 0;
}

用法四

四个参数:
pos1,替换的开始位置
pos2,替换的结束位置
n,替换的个数
ch,要进行替换的字符

作用就是:
将str中从pos1 到pos2的子串替换为n个ch

下面给出一个例子:

#include<iostream>using namespace std;int main()
{string str = "Hello wolrd";char ch = '#';str = str.replace(0, 5, 3, ch);cout << str << endl;return 0;
}

运行结果:

在这里插入图片描述

compare

这个函数的作用就是比较两个字符串是否相等

语法格式

str1.compare(str2);

通过字典序来比较

str1大就返回一个大于0的数
不然就返回一个小于0的数

下面给出一个例子

#include<iostream>using namespace std;int main()
{string str1 = "Hello";string str2 = "world";int ret = str1.compare(str2);if (ret == 0){cout << "==" << endl;}else if (ret > 0){cout << ">" << endl;}else{cout << "<" << endl;}return 0;
}

结语

本篇文章介绍了find、rfind、replace、compare这些函数,希望对你有帮助

我们下篇文章见~

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

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

相关文章

什么是Selenium?使用Selenium进行自动化测试!

你知道什么是 Selenium 吗&#xff1f;你知道为什么要使用它吗&#xff1f;答案就在本文中&#xff0c;很高兴能够与你共飧。 自动化测试正席卷全球&#xff0c;Selenium 认证是业界最抢手的技能之一。 什么是 Selenium&#xff1f; Selenium 是一种开源工具&#xff0c;用于…

96 # cookie

cookie 和 session 和 sessionStorage 和 localStorage localStorage 和 sessionStorage 本地储存&#xff08;发送请求不会携带&#xff09;&#xff0c;不能跨域localStorage 浏览器关闭后不会清空&#xff0c;必须手动清空sessionStorage 浏览器关闭后就会销毁http 无状态的…

如何使用 API 接口获取商品数据,从申请 API 接口、使用 API 接口到实际应用,一一讲解

在当今的数字化时代&#xff0c;应用程序接口&#xff08;API&#xff09;已经成为数据获取的重要通道。API 接口使得不同的应用程序能够方便地进行数据交换&#xff0c;从而促进了信息的广泛传播和利用。在众多的数据源中&#xff0c;商品数据是一个非常重要的领域&#xff0c…

postman怎么进行参数化?

一、先准备好参数化数据 &#xff08;参数化数据可以使用Excel或者txt的文件。 注意如果使用的是txt的文件&#xff0c;一定要使用英文的逗号&#xff0c;不然的话会报错&#xff01;&#xff09; 注意&#xff1a;填写好的数据后&#xff0c;保存的时候需要另存为&#xff0c…

接口自动化测试:pytest基础讲解

为什么要做接⼝测试&#xff1f; 只靠前端测试很难确保很⾼的覆盖率。接⼝测试&#xff0c;可以模拟出各种类型的⼊参&#xff0c;包括⼀些在前端模拟不出来的⼊参&#xff0c;还能根据接⼝⽂档的定义&#xff0c;设计出相对完善的⼊参值&#xff0c;在接⼝层保证质量&#xff…

燃尽图是什么?如何用它提升敏捷项目流程?

**敏捷项目管理**的核心是透明度和持续改进。燃尽图是轻松实现这两点的秘密武器。这种动态的可视化工具能有效地说明团队在一段时间内的进展情况&#xff0c;突出显示剩余的工作&#xff0c;并揭示你的团队是否在实现目标的正轨上。 敏捷项目管理中的燃尽图 燃尽图是敏捷项目…

mac怎么把两张图片拼在一起

mac怎么把两张图片拼在一起&#xff1f;在如今的生活中&#xff0c;喜欢摄影的朋友们越来越多。拍照已经成为我们的一种习惯&#xff0c;因为当我们遇到美景或迷人的人物时&#xff0c;总是忍不住按下快门&#xff0c;将它们定格。随着时间的推移&#xff0c;我们渐渐发现自己的…

【SQL】统一训练平台数据库实践--20230927

储存过程vlookup_peopledata_csodtraining 默认导出用今天批次的数据进行join on&#xff0c;先删除过渡表的资料&#xff0c;再将查询结果放在过渡表中。 BEGINDECLARE startdate varchar(50);SET startdate date_format(NOW(),%Y%m%d);DELETE FROM season.csod_data2;INSE…

项目04-基于Docker的Prometheus+Grafana+AlertManager的飞书监控报警平台

文章目录 一.项目介绍1.流程图2.拓扑图3.详细介绍 二.前期准备1.项目环境2.IP划分 三. 项目步骤1.ansible部署软件环境1.1 安装ansible环境1.2 建立免密通道1.3 批量部署docker 2 部署nginx、MySQL以及cadvisor、exporter节点2.1 在nginx节点服务器上面配置nginx、node_exporte…

可以动态改变刻度背景色的车速仪表盘

最近做的项目的主页面需要用到一个仪表盘来动态显示车速&#xff0c;同时改变对应的背景色 仪表盘 开始是想着使用echarts&#xff0c;修修改改拿来用&#xff0c;但是人家客户有规定&#xff0c;必须搞个差不多的&#xff0c;那没办法&#xff0c;自 己动手搞个吧 截图如下&am…

如何快速重置模型原点

1、什么是模型原点&#xff1f; 模型原点是三维建模中的概念&#xff0c;它是指在一个虚拟三维空间中确定的参考点。模型原点通常位于模型的几何中心或基本组件的中心位置。如图所示&#xff1a; 可以看到模型的原点在模型的几何中心 2、模型原点的作用 知道了什么是模型原点&…

MR混合现实在军事课堂教学中的应用演示

战场模拟&#xff1a;利用MR技术可以创建逼真的战场模拟环境&#xff0c;将学生置身于真实的战场场景中&#xff0c;可以体验和学习各种作战技巧和战术策略。学生可以通过佩戴MR头盔或眼镜&#xff0c;观察虚拟的场景&#xff0c;并与虚拟对象进行互动&#xff0c;如操作武器、…

人员重识别:Person Re-Identification without Identification via Event Anonymization

论文作者&#xff1a;Shafiq Ahmad,Pietro Morerio,Alessio Del Bue 作者单位&#xff1a;Istituto Italino di Tecnologia;Universita degli Studi di Genova 论文链接&#xff1a;http://arxiv.org/abs/2308.04402v1 内容简介&#xff1a; 1&#xff09;方向&#xff1a;…

漏洞扫描环境:win10系统用VMware Workstation打开虚拟机若干问题

win10系统用VMware Workstation打开虚拟机若干问题 一 .VMware打开虚拟机就蓝屏重启怎么解决&#xff1f;一. VMware打开虚拟机就蓝屏重启怎么解决&#xff1f;方法一&#xff1a;1、同时按下CTRLSHIFTESC打开任务管理器功能&#xff0c;之后依次点击-详细信息-性能后出现下列界…

【计算机网络】IP协议(上)

文章目录 TCP与 IP之间的关系IP地址的认识协议报头格式1. 报头和有效载荷如何分离&#xff1f;2. 8位协议3. 4位版本4. 8位服务类型5. 16位总长度6. 8位生存时间 TTL 网段划分IP地址的划分 子网划分CIDR的提出如何理解CIDR TCP与 IP之间的关系 如&#xff1a;假设 你上高中时&…

210-课程表III

文章目录 210-课程表III1. 题目 210-课程表III 1. 题目

npm安装心得(依赖库Python及node-sass依赖环境)

在使用vue的开发环境过程中&#xff0c;总会遇到这样哪样的安装或者打包错误&#xff0c; vue运行或打包常见错误如下&#xff1a; 1. npm install时 node-sass npm ERR command failed &#xff08;可能是node.js的版本和node-sass的版本不符&#xff0c;就是卸掉原来的node.…

第二证券:国庆档票房有望延续复苏态势 海风拐点已至

昨日&#xff0c;两市股指盘中强势轰动上扬&#xff0c;创业板指早盘一度涨近2%&#xff0c;随后涨幅逐渐收窄。到收盘&#xff0c;沪指涨0.16%报3107.32点&#xff0c;深成指涨0.44%报10104.32点&#xff0c;创业板指涨0.82%报2006.22点&#xff0c;两市算计成交7165亿元&…

深入理解 pytest.main():Python 测试框架的核心功能解析

前言 笔者平常运行pytest用例时&#xff0c;通常使用命令行方式&#xff0c;像这样 pytest -v pxl/test_dir/test_demo.py::TestDemo::test_my_var&#xff0c;执行某一条case&#xff0c;但每次命令行敲也挺麻烦的。那如何在python代码中调用pytest呢&#xff1f;带着疑问一…

MySQL面试题-索引的基本原理及相关面试题

先了解一下MySQL的结构 下面我们重点讲一下存储引擎 MySQL的数据库和存储数据的目录是一一对应的&#xff0c;这些数据库的文件就保存在磁盘中对应的目录里 下面我们来看一下对应的具体数据文件 .frm是表的结构&#xff0c;不管什么样的索引都会有 .ibd代表我们现在使用的存…