【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.mzph.cn/news/90478.shtml

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

相关文章

Python爬虫技术系列-01请求响应获取-urllib库

Python爬虫技术系列-01请求响应获取-urllib库 1 urllib库1.1 urllib概述1.1.1 urllib简介1.1.2 urllib的robotparser模块1.1.3 request模块1.1.4 Error1.1.5 parse模块1.1.6 百度翻译案例 1.2 urllib高级应用1.2.1Opener1.2.2 代理设置 1 urllib库 参考连接&#xff1a; https…

php导出cvs,excel打开数字超过16变科学计数法

今天使用php导出cvs&#xff0c;在excel中打开&#xff0c;某一个字段是数字&#xff0c;长度高于16位结果就显示科学计数法 超过15位的话从第16位开始就用0代替了 查询了半天总算解决了就是在后面加上"\t" $data[$key][1] " ".$value[1]."\t";…

记录一次SQL注入src挖掘过程

记录一次小白SQL注入src挖掘过程&#xff0c;其中碰到了很多问题&#xff0c;报错和解决 先是使用谷歌语法找到一个可以注入的网站 谷歌语法&#xff1a; 公司inurl:php?id 然后该公司的URL为 URL:XXXXXXXXXX/xxx.php?id1 输入测试有无注入&#xff0c;有没有waf 发现…

一探Redis究竟:超火爆入门指南,你竟然还没看?

Redis入门教程目录&#xff1a;【Redis入门教程目录】 简介 Redis是由C语言编写的开源、基于内存、支持多种数据结构、高性能的Key-Value数据库。 特性 速度快 首先Redis是将数据储存在内存中的&#xff0c;通常情况下每秒读写次数达到千万级别。其次Redis使用ANSI C编写&…

产品经理认证(UCPM)备考心得

UCPM是联合国训练所CIFAL中心颁发的产品经理证书。如今&#xff0c;ESG是推动企业可持续发展的新潮流。UCPM作为一种可持续发展证书&#xff0c;为我们带来了一套先进科学、系统全面的产品管理模式&#xff0c;是产品管理领域公认的权威证书。那么&#xff0c;如何准备这张证书…

python tempfile模块:生成临时文件和临时目录

嗨喽~大家好呀&#xff0c;这里是魔王呐 ❤ ~! python更多源码/资料/解答/教程等 点击此处跳转文末名片免费获取 tempfile 模块专门用于创建临时文件和临时目录&#xff0c;它既可以在 UNIX 平台上运行良好&#xff0c;也可以在 Windows 平台上运行良好。 tempfile 模块中常用…

GEO生信数据挖掘(三)芯片探针ID与基因名映射处理

检索到目标数据集后&#xff0c;开始数据挖掘&#xff0c;本文以阿尔兹海默症数据集GSE1297为例 目录 处理一个探针对应多个基因 1.删除该行 2.保留分割符号前面的第一个基因 处理多个探针对应一个基因 详细代码案例一删除法 详细代码案例二 多个基因名时保留第一个基因名…

进阶JS-内置构造函数

基本数据类型&#xff1a;string、number、boolean、undefined、null 引用类型:对象 其实字符串、数值、布尔等基本类型也都有专门的构造函数&#xff0c;这些我们称为包装类型。 JS中几乎所有的数据都可以基于构成函数创建。 const str andy//其实是const strnew String(a…

在windows的ubuntu LTS中安装及使用EZ-InSAR进行InSAR数据处理

EZ-InSAR&#xff08;曾被称为MIESAR&#xff0c;即Matlab界面用于易于使用的合成孔径雷达干涉测量&#xff09;是一个用MATLAB编写的工具箱&#xff0c;用于通过易于使用的图形用户界面&#xff08;GUI&#xff09;进行干涉合成孔径雷达&#xff08;InSAR&#xff09;数据处理…

开源博客项目Blog .NET Core源码学习(3:数据库操作方式)

开源博客项目Blog采用SqlSugar模块连接并操作数据库&#xff0c;本文学习并记录项目中使用SqlSugar的方式和方法。   首先&#xff0c;数据库连接信息放在了App.Hosting项目的appsettings.json中DbConfig节&#xff0c;支持在DbConfig节配置多个数据库连接信息&#xff0c;以…

基于FFmpeg+SDL的视频播放器的制作

基于FFmpegSDL的视频播放器的制作 基于FFmpegSDL的视频播放器的制作实验1实验2实验3实验4基本练习进阶练习 实验5实验6 基于FFmpegSDL的视频播放器的制作 雷霄骅博士的课程。 课程链接&#xff1a;https://blog.csdn.net/leixiaohua1020/article/details/47068015 初学 FFmp…

MongoDB索引

索引支持在MongoDB中高效执行查询。如果没有索引&#xff0c;MongoDB必须扫描集合中的每个文档才能返回查询结果。如果查询存在适当的索引&#xff0c;MongoDB将使用该索引来限制它必须扫描的文档数。 尽管索引提高了查询性能&#xff0c;但添加索引对写入操作的性能有负面影响…

DataX

序言 弄过了Chunjun 过来搞搞DataX3.0 https://github.com/alibaba/DataXhttps://github.com/alibaba/DataX/blob/master/introduction.mdhttps://github.com/alibaba/DataX/blob/master/userGuid.md 简介 ​ DataX 是一个异构数据源离线同步工具&#xff0c;致力于实现包…

如何使用ArcGIS Pro直接获取道路中心线

以前使用ArcGIS获取道路中心线&#xff0c;需要先将面要素转换为栅格再获取中心线&#xff0c;现在我们可以通过ArcGIS Pro直接获取道路中心线&#xff0c;这里为大家介绍一下获取方法&#xff0c;希望能对你有所帮助。 新建地理数据库 在存储数据的文件夹上点击右键&#xff…

【C++】STL之list深度剖析及模拟实现

目录 前言 一、list 的使用 1、构造函数 2、迭代器 3、增删查改 4、其他函数使用 二、list 的模拟实现 1、节点的创建 2、push_back 和 push_front 3、普通迭代器 4、const 迭代器 5、增删查改(insert、erase、pop_back、pop_front) 6、构造函数和析构函数 6.1、默认构造…

CSS box-shadow阴影

1、语法 box-shadow: h-shadow v-shadow blur spread color inset; 值描述h-shadow必需的。水平阴影的位置。允许负值v-shadow必需的。垂直阴影的位置。允许负值blur可选。模糊距离spread可选。阴影的大小color可选。阴影的颜色。在CSS颜色值寻找颜色值的完整列表inset可选。…

【Linux】Linux远程访问Windows下的MySQL数据库

1.建立Windows防火墙规则 首先需要开放windows防火墙&#xff0c;针对3306端口单独创建一条规则&#xff0c;允许访问。 打开windows安全中心防火墙与保护&#xff0c;点击高级设置 进入之后&#xff0c;点击入站规则&#xff0c;新建一条规则 新建端口入站规则 端口填写330…

使用vue-cli搭建SPA项目

目录 引言 什么是SPA&#xff1f; Vue CLI 是什么&#xff1f; 步骤1&#xff1a;安装 Vue CLI 为什么选择 Vue CLI 作为项目搭建工具 安装vue-cli 步骤2&#xff1a;创建新的 Vue 项目 创建成功后的项目结构 步骤3&#xff1a;项目结构概述 vue项目结构说明 步骤4&a…

Vue中前端导出word文件

很多时候在工作中会碰到完全由前端导出word文件的需求&#xff0c;因此特地记录一下比较常用的几种方式。 一、提供一个word模板 该方法提供一个word模板文件&#xff0c;数据通过参数替换的方式传入word文件中&#xff0c;灵活性较差&#xff0c;适用于简单的文件导出。需要…

论文笔记(整理):轨迹相似度顶会论文中使用的数据集

0 汇总 数据类型数据名称数据处理出租车数据波尔图 原始数据&#xff1a;2013年7月到2014年6月&#xff0c;170万条数据 ICDE 2023 Contrastive Trajectory Similarity Learning with Dual-Feature Attention 过滤位于城市&#xff08;或国家&#xff09;区域之外的轨迹 过…