【C++】STL 容器 - string 字符串操作 ⑤ ( string 字符串查找 | find 函数查找字符串 | rfind 函数查找字符串 )

news2024/12/26 21:28:40

文章目录

  • 一、string 字符查找 - find 函数查找字符串
    • 1、string 类 find 函数原型说明
    • 2、代码示例 - 字符串查找
    • 3、代码示例 - 统计字符串子串
  • 二、string 字符查找 - rfind 函数查找字符串
    • 1、string 类 rfind 函数原型说明
    • 2、代码示例 - rfind 字符串查找






一、string 字符查找 - find 函数查找字符串



1、string 类 find 函数原型说明


string 类 find 函数查找字符串 : string 类的 find 函数除了可以查找单个字符外 , 还可以查找子字符串 , 如果没有查到就返回 -1 ;

  • 从指定位置开始查找 字符 : 在 string 字符串中 , 从 pos 索引位置 ( 包括该位置索引自身 ) 开始查找字符 c 在当前字符串的位置 , 如果没有查到就返回 -1 ;
int find(char c,int pos=0) const;
  • 从指定位置开始查找 char* 字符串 : 在 string 字符串中 , 从 pos 索引位置 ( 包括该位置索引自身 ) 开始查找 char* 类型字符串 s 在当前字符串的位置 , 如果没有查到就返回 -1 ;
int find(const char *s, int pos=0) const;
  • 从指定位置开始查找 string 字符串 : 在 string 字符串中 , 从 pos 索引位置 ( 包括该位置索引自身 ) 开始查找 string 类型字符串 s 在当前字符串的位置 , 如果没有查到就返回 -1 ;
int find(const string &s, int pos=0) const;

2、代码示例 - 字符串查找


代码示例 :

#include "iostream"
using namespace std;
#include "string"

int main() {

	string s1 = "Tom And Jerry, Hello World, Tom !";

	// 从 0 位置开始 ( 包括 0 位置 ) , 统计第一次出现 Tom 字符串的位置
	int index = s1.find("Tom", 0);
	// index: 0
	cout << "index: " << index << endl;

	// 从 4 位置开始 ( 包括 4 位置 ) , 统计第一次出现 Tom 字符串的位置
	index = s1.find("Tom", 4);
	// index: 28
	cout << "index: " << index << endl;

	// 控制台暂停 , 按任意键继续向后执行
	system("pause");

	return 0;
};

执行结果 :

index: 0
index: 28
请按任意键继续. . .

在这里插入图片描述


3、代码示例 - 统计字符串子串


查找 “Tom” 字符串出现的 下标 和 次数 ;

	string s1 = "Tom And Jerry, Hello World, Tom !";

首先 , 查找出第一次下标 , 然后开启循环 ;

	// 1. 先查找出第一次下标
	int index = s1.find("Tom", 0);

然后 , 设置循环条件 : 如果没有查到到返回 string::npos 也就是 -1 , 如果查找到了 返回结果不等于 string::npos / -1 就一直循环下去 , 直到返回 string::npos / -1 为止 ;

在循环中 , 每次索引自增 3 , 继续查找后续索引, 此处跳过本次查找的字符串 ;

	while (index != string::npos)
	{
		cout << "出现 Tom 字符串 的索引 index = " << index << endl;

		// 索引自增, 继续查找后续索引, 此处跳过本次查找的字符串
		index = index + 3;

		// 继续 基于新的索引 向后查找
		index = s1.find("Tom", index);

		// 每次统计 find 结果不为 -1 , count 就自增 1
		count++;
	}

代码示例 :

#include "iostream"
using namespace std;
#include "string"

int main() {

	string s1 = "Tom And Jerry, Hello World, Tom !";

	//查找 "Tom" 字符串出现的 下标 和 次数
	// 1. 先查找出第一次下标
	int index = s1.find("Tom", 0);

	// 保存出现次数
	int count = 0;

	// 2. 设置循环条件 : 如果没有查到到返回 string::npos 也就是 -1
	//	  如果查找到了 返回结果不等于 string::npos / -1 就一直循环下去
	//	  直到返回 string::npos / -1 为止
	while (index != string::npos)
	{
		cout << "出现 Tom 字符串 的索引 index = " << index << endl;

		// 索引自增, 继续查找后续索引, 此处跳过本次查找的字符串
		index = index + 3;

		// 继续 基于新的索引 向后查找
		index = s1.find("Tom", index);

		// 每次统计 find 结果不为 -1 , count 就自增 1
		count++;
	}

	cout << "出现 Tom 字符串 的次数 count = " << count << endl;

	// 控制台暂停 , 按任意键继续向后执行
	system("pause");

	return 0;
};

执行结果 :

出现 Tom 字符串 的索引 index = 0
出现 Tom 字符串 的索引 index = 28
出现 Tom 字符串 的次数 count = 2
请按任意键继续. . .

在这里插入图片描述





二、string 字符查找 - rfind 函数查找字符串



1、string 类 rfind 函数原型说明


string 类 rfind 函数查找字符串 : 在字符串中从 指定位置 开始 从右到左 查找字符 c ; 如果找到 则返回该字符在字符串中的位置 , 返回的位置索引 从0开始计数 ; 如果没有找到返回string::npos / -1 ;

  • 从指定位置开始查找 字符 :string 字符串中 , 从 npos 索引位置 ( 包括该位置索引自身 ) 开始 从右向左 查找字符 c 在当前字符串的位置 , 如果没有查到就返回 -1 ; 如果找到 则返回该字符在字符串中的位置 , 返回的位置索引 从0开始计数 ; 如果没有找到返回string::npos / -1 ;
int rfind(char c, int pos=npos) const;
  • 从指定位置开始查找 char* 字符串 :string 字符串中 , 从 npos 索引位置 ( 包括该位置索引自身 ) 开始 从右向左 查找 char* 类型字符串 s 在当前字符串的位置 , 如果没有查到就返回 -1 ; 如果找到 则返回该字符在字符串中的位置 , 返回的位置索引 从0开始计数 ; 如果没有找到返回string::npos / -1 ;
int rfind(const char *s, int pos=npos) const;
  • 从指定位置开始查找 string 字符串 :string 字符串中 , 从 npos 索引位置 ( 包括该位置索引自身 ) 开始 从右向左 查找 string 类型字符串 s 在当前字符串的位置 , 如果没有查到就返回 -1 ; 如果找到 则返回该字符在字符串中的位置 , 返回的位置索引 从0开始计数 ; 如果没有找到返回string::npos / -1 ;
int rfind(const string &s, int pos=npos) const;

2、代码示例 - rfind 字符串查找


代码示例 :

#include "iostream"
using namespace std;
#include "string"

int main() {

	string s1 = "Tom And Jerry, Hello World, Tom !";


	// 从 0 位置开始 ( 包括 0 位置 ) , 统计第一次出现 Tom 字符串的位置
	int index = s1.rfind("Tom", 0);
	// index: 0
	cout << "index: " << index << endl;

	// 从 末尾 位置开始 ( 包括 末尾 位置 ) , 统计第一次出现 Tom 字符串的位置
	index = s1.rfind("Tom", s1.length() - 1);
	// index: 28
	cout << "index: " << index << endl;


	// 控制台暂停 , 按任意键继续向后执行
	system("pause");

	return 0;
};

执行结果 :

index: 0
index: 28
请按任意键继续. . .

在这里插入图片描述

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

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

相关文章

如何查看PHP信息

创建一个 PHP 文件&#xff0c;比如 info.php&#xff0c;在其中添加以下代码&#xff1a; <?php phpinfo(); ?>访问这个文件&#xff08;例如&#xff0c;在浏览器中输入 http://localhost/info.php&#xff09;&#xff0c;它会显示 PHP 的所有配置信息。在这个页面…

论文降重同义词替换的实践经验与改进建议 快码论文

大家好&#xff0c;今天来聊聊论文降重同义词替换的实践经验与改进建议&#xff0c;希望能给大家提供一点参考。 以下是针对论文重复率高的情况&#xff0c;提供一些修改建议和技巧&#xff0c;可以借助此类工具&#xff1a; 标题&#xff1a;论文降重同义词替换的实践经验与改…

Linux 下的PROC虚拟文件夹的介绍

#江南的江 #每日鸡汤&#xff1a;其一半亩方塘一鉴开,天光云影共徘徊。问渠哪得清如许?为有源头活水来 #初心和目标&#xff1a;在网络安全中崭露头角 PROC 一.proc的文件里的文件是对于计算机的基本信息的介绍。 其中数字文件是代表着进程&#xff0c;其余的例如cpuinfo…

[NOI2015] 程序自动分析(并查集)

题解 最后的结果与约束条件的顺序无关&#xff0c;可以先考虑相等条件&#xff0c;再考虑不等条件。由于题目中i和j的数据范围较大&#xff0c;需要用到离散化。 代码 #include <cstdio> #include <cstring> #include <iostream> #include <algorithm>…

01 整体代码运行流程

文章目录 01 整体代码运行流程1.1 运行官方 Demo1.2 变量命名规则1.3 多线程1.4 线程锁1.5 SLAM 主类 System 01 整体代码运行流程 1.1 运行官方 Demo 以 stereo_kitti 为例&#xff0c;执行 ./stereo_kitti path_to_vocabulary path_to_settings path_to_sequence./stereo_…

FLStudio2024版本新增功能及21.3版本安装下载教程

FLStudio21.0.2.3中文版完整下载是最好的音乐开发和制作软件也称为水果循环。它是最受欢迎的工作室&#xff0c;因为它包含了一个主要的听觉工作场所。最新FL有不同的功能&#xff0c;如它包含图形和音乐音序器&#xff0c;帮助您使完美的配乐在一个美妙的方式。此程序可用于Mi…

目标检测应用场景—数据集【NO.18】银杏果目标检测数据集

写在前面&#xff1a;数据集对应应用场景&#xff0c;不同的应用场景有不同的检测难点以及对应改进方法&#xff0c;本系列整理汇总领域内的数据集&#xff0c;方便大家下载数据集&#xff0c;若无法下载可关注后私信领取。关注免费领取整理好的数据集资料&#xff01;今天分享…

gazebo中手动控制ur5机械臂

创建工作空间 cd ~ mkdir -p catkin_ws/src cd ~/catkin_ws/src 下载代码 ~/catkin_ws/src$ git clone https://github.com/dairal/ur5-joint-position-control.git ~/catkin_ws/src$ cd .. ~/catkin_ws$ catkin_make ~/catkin_ws$ source devel/setup.bash 安装ros-contro…

[LeetCode周赛复盘] 第 376 场周赛20231217

[LeetCode周赛复盘] 第 376 场周赛20231217 一、本周周赛总结100149. 找出缺失和重复的数字![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/347f99d7222f4b8a9c9b14fdff240e4d.png)2. 思路分析3. 代码实现 100161. 划分数组并满足最大差限制1. 题目描述2. 思路分析…

【LeetCode刷题-树】--173.二叉搜索树迭代器

173.二叉搜索树迭代器 本题就是实现二叉树的中序遍历&#xff0c;利用数组本身实现迭代器 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.va…

JSON Ajax

1. JSON概念 JSON&#xff0c;全称JavaScript Object Notation&#xff0c;即JavaScript对象表示法&#xff0c;是一种轻量级的数据交换格式。它基于JavaScript的子集&#xff0c;易于人阅读和编写&#xff0c;同时也易于机器解析和生成。 JSON的诞生&#xff0c;是为了解决电…

关于“Python”的核心知识点整理大全24

目录 ​编辑 10.1.6 包含一百万位的大型文件 pi_string.py 10.1.7 圆周率值中包含你的生日吗 10.2 写入文件 10.2.1 写入空文件 write_message.py programming.txt 10.2.2 写入多行 10.2.3 附加到文件 write_message.py programming.txt 10.3 异常 10.3.1 处理 Ze…

python装饰器理解

这篇文章记录了对python装饰器的理解&#xff0c;主要参考了文章【Python】一文弄懂python装饰器&#xff08;附源码例子&#xff09;&#xff0c;大部分内容是直接转载的&#xff0c;然后根据自己的理解多加了一些解释说明。 python装饰器理解 1 装饰器2 使用装饰器的动机3 简…

解决报错:ModuleNotFoundError: No module named ‘timm.optim.novograd‘ 的办法,亲测有效

问题 在尝试运行文件的时候&#xff0c;有这样的引用 from timm.optim.novograd import NovoGrad 总是报错&#xff01;&#xff01;&#xff01; 解决办法 试过 更新timm &#xff1a; pip install --upgrade timm 试过换一种引用方式 from timm.optim import NovoGra…

英伟达 Jetson Xavier/Xavier NX/Orin系统移植编译

英伟达 Jetson Xavier/Xavier NX/Orin系统移植编译 1、下载Jetson BSP包和交叉编译环境 地址&#xff1a;https://developer.nvidia.com/embedded/jetson-linux-archive下载需要版本即可&#xff0c;此次编译采用32.4.2版本 需要下载的文件如下&#xff1a; 2、新建一个文件…

简历提示:如何撰写出色的简历

您的简历可能是您一生中写的最重要的一页。遵循我们的 20 条简历写作技巧&#xff0c;让您的简历取得成功。 您知道一份出色的简历的重要性。这是您获得一份好工作所需的文件&#xff0c;而一份好工作可以带来美好的生活。因此&#xff0c;我们整理了 20 个简历技巧来帮助您撰…

JWT知识

JWT概念 JWT组成 Java实现JWT Header String getHeader() {String header "{\"alg\":\"HS256\",\"typ\":\"JWT\"}";String encodeBase64URLSafeString Base64.encodeBase64URLSafeString(header.getBytes(StandardCharset…

Python数据科学视频讲解:Python字典

2.13 Python字典 视频为《Python数据科学应用从入门到精通》张甜 杨维忠 清华大学出版社一书的随书赠送视频讲解2.13节内容。本书已正式出版上市&#xff0c;当当、京东、淘宝等平台热销中&#xff0c;搜索书名即可。内容涵盖数据科学应用的全流程&#xff0c;包括数据科学应用…

时序分解 | Matlab实现NGO-ICEEMDAN基于北方苍鹰算法优化ICEEMDAN时间序列信号分解

时序分解 | Matlab实现NGO-ICEEMDAN基于北方苍鹰算法优化ICEEMDAN时间序列信号分解 目录 时序分解 | Matlab实现NGO-ICEEMDAN基于北方苍鹰算法优化ICEEMDAN时间序列信号分解效果一览基本介绍程序设计参考资料 效果一览 基本介绍 Matlab实现NGO-ICEEMDAN基于北方苍鹰算法优化ICE…

关联规则分析和相关系数

在第三讲 我们说过了一个皮尔森系数的计算公式 然后在第八讲 我们又看到了一个类似的式子。 这个是属于相关分析的范畴