C++进阶篇5:字符串查找

2023-11-10

在STL中,字符串查找可以实现多种功能,例如:

  • 搜索单个字符、搜索子串;
  • 实现前向搜索、后向搜索;
  • 分别实现搜索第一个和最后一个满足条件的字符(或子串);

要明确的一点是,所有查找find()函数的返回值均是size_type类型,即无符号整数类型,该返回值用于表示字符串中元素个数或者字符在字符串中的位置。

find()函数和rfind()函数

find()函数的四种原型如下:

原型 功能
size_type find(value_type_Chr, size_type_Off = 0) const; 第一个参数是被搜索的字符、第二个参数是在源串中开始搜索的位置
size_type find(const value_type*_Ptr, size_type_Off = 0) const; 第一个参数是被搜索的字符串、第二个参数是在源串中开始搜索的位置
size_type find(const value_type*_Ptr, size_type_Off = 0, size_type_Const) const; 第一个参数是被搜索的字符串、第二个参数是在源串中开始搜索的位置、第三个参数是第一个参数中用于搜索的字符串长度
size_type find(const basic_string&_Str, size_type_Off = 0) const; 第一个参数是被搜索的字符串、第二个参数是在源串中开始搜索的位置

rfind()函数的原型和find()函数的原型类似,参数也类似,只不过rfind()适用于逆向查找。

find()函数的使用方法如下:

#include <iostream>
#include <string>

using namespace std;

int main ()
{
    string str_ch(" for");
    string str(" Hi, Peter, I'm sick. Please bought some drugs for me.");

    string::size_type m = str.find('P', 5);
    cout << "Example - find() : The position (forward) of 'P' is: " << (int) m << endl;
    string::size_type n = str.find(" some", 0);
    cout << "Example - find() : The position (forward) of 'some' is: " << (int) n << endl;
    string::size_type mo = str.find(" drugs", 0, 5);
    cout << "Example - find(): The position (forward) of 'drugs' is: " << (int) mo << endl;
    string::size_type no = str.find(str_ch, 0);
    cout << "Example - find(): The position of 'for' is: " << (int) no << endl;
    cin.get();
}

程序运行结果如下:

Example - find() : The position (forward) of 'P' is: 5
Example - find () : The position (forward) of 'some' is: 35
Example - find(): The position (forward) of 'drugs' is: 40
Example - find (): The position of 'for' is: 46

rfind()函数的使用方法如下:

#include <iostream>
#include <string>

using namespace std;

int main ()
{
    string str_ch(" for");
    string str(" Hi, Peter, I'm sick. Please bought some drugs for me.");

    string::size_type rm = str.rfind('P', 5);
    cout << "Example - rfind(): The position (reverse) of 'P' is: " << (int) rm << endl;
    string::size_type rn = str.rfind(" some", 0);
    cout << "Example - rfind() : The position (reverse) of 'some' is: " << (int) rn << endl;
    string::size_type rmo = str.rfind(" drugs", 0, 5);
    cout << "Example - rfind(): The position (reverse) of 'drugs' is: " << (int) rmo << endl;
    string::size_type rno = str.rfind(str_ch, 0);
    cout << "Example - rfind(): The position of 'for' is: " << (int) rno << endl;
    cin.get();
}

程序运行结果如下:

Example - rfind(): The position (reverse) of 'P' is: 5
Example - rfind() : The position (reverse) of 'some' is: -1
Example - rfind(): The position (reverse) of 'drugs' is: -1
Example - rfind(): The position of 'for' is: -1

除此之外,用于搜索的函数还有find_first_of()find_last_of()find_first_not_of()find_last_not_of()

其中find_first_of()函数可实现在源串中搜索某字符串的功能,该函数的返回值是被搜索字符串的第 1 个字符第 1 次出现的下标(位置)。若查找失败,则返回 npos。

find_last_of()函数同样可实现在源串中搜索某字符串的功能。与find_first_of()函数所不同的是,该函数的返回值是被搜索字符串的最后 1 个字符的下标。若查找失败,则返回 npos。

find_first_not_of()函数可实现在源字符串中搜索与指定字符(串)不相等的第 1 个字符;

find_last_not_of()函数可实现在源字符串中搜索与指定字符(串)不相等的最后 1 个字符。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++进阶篇5:字符串查找 的相关文章

  • 在C语言中使用“void”

    我很困惑为什么我们需要通过void转换为 C 函数 int f void return 0 versus int f return 0 什么是正确的做法以及为什么 In C int f 是一种老式的声明 它说f需要固定但未指定数量和类型的参
  • 具有子列表属性映射问题的自动映射器

    我有以下型号 Models public class Dish Required public Int64 ID get set Required public string Name get set Required public str
  • ASP.NET MVC 中的经典 ASP (C#)

    我有一个应用程序想要 最终 转换为 ASP NET MVC 我想要进行全面的服务升级 到 ASP NET 但想要使用当前的 ASP 内容来运行当前的功能 这样我就可以在对新框架进行增量升级的同时升级小部分 该站点严重依赖于不太成熟的 VB6
  • OpenCv读/写视频色差

    我试图简单地使用 openCV 打开视频 处理帧并将处理后的帧写入新的视频文件 我的问题是 即使我根本不处理帧 只是打开视频 使用 VideoCapture 读取帧并使用 VideoWriter 将它们写入新文件 输出文件看起来比输入更 绿
  • 如何创建可以像 UserControl 一样编辑的 TabPage 子类?

    我想创建一个包含一些控件的 TabPage 子类 并且我想通过设计器来控制这些控件的布局和属性 但是 如果我在设计器中打开子类 我将无法像在 UserControl 上那样定位它们 我不想创建一个带有 UserControl 实例的 Tab
  • C# 中的接口继承

    我试图解决我在编写应用程序时遇到的相当大的 对我来说 问题 请看这个 为了简单起见 我将尝试缩短代码 我有一个名为的根接口IRepository
  • 构造函数中显式关键字的使用

    我试图了解 C 中显式关键字的用法 并查看了这个问题C 中的explicit关键字是什么意思 https stackoverflow com questions 121162 但是 那里列出的示例 实际上是前两个答案 对于用法并不是很清楚
  • 如何配置 WebService 返回 ArrayList 而不是 Array?

    我有一个在 jax ws 上实现的 java Web 服务 此 Web 服务返回用户的通用列表 它运行得很好 Stateless name AdminToolSessionEJB RemoteBinding jndiBinding Admi
  • Qt 创建布局并动态添加小部件到布局

    我正在尝试在 MainWindow 类中动态创建布局 我有四个框架 它们是用网格布局对象放置的 每个框架都包含一个自定义的 ClockWidget 我希望 ClockWidget 对象在调整主窗口大小时相应地调整大小 因此我需要将它们添加到
  • 基于xsd模式生成xml(使用.NET)

    我想根据我的 xsd 架构 cap xsd 生成 xml 文件 我找到了这篇文章并按照说明进行操作 使用 XSD 文件生成 XML 文件 https stackoverflow com questions 6530424 generatin
  • 如何重置捕获像素的值

    我正在尝试创建一个 C 函数 该函数返回屏幕截图位图中每四个像素的 R G 和 B 值 这是我的代码的一部分 for int ix 4 ix lt 1366 ix ix 4 x x 4 for int iy 3 iy lt 768 iy i
  • 将构建日期放入“关于”框中

    我有一个带有 关于 框的 C WinForms 应用程序 我使用以下方法将版本号放入 关于 框中 FileVersionInfo GetVersionInfo Assembly GetExecutingAssembly Location F
  • 当我“绘制”线条时,如何将点平均分配到 LineRenderer 的宽度曲线?

    我正在使用线条渲染器创建一个 绘图 应用程序 现在我尝试使用线条渲染器上的宽度曲线启用笔压 问题在于 AnimationCurve 的 时间 值 水平轴 从 0 标准化为 1 因此我不能在每次添加位置时都在其末尾添加一个值 除非有一个我不知
  • 尚未处理时调用 Form 的 Invoke 时出现 ObjectDisposeException

    我们得到一个ObjectDisposedException从一个电话到Invoke在尚未处理的表格上 这是一些演示该问题的示例代码 public partial class Form2 Form void Form2 Load object
  • g++ 对于看似不相关的变量“警告:迭代...调用未定义的行为”

    考虑以下代码strange cpp include
  • 在类的所有方法之前运行一个方法

    在 C 3 或 4 中可以做到这一点吗 也许有一些反思 class Magic RunBeforeAll public void BaseMethod runs BaseMethod before being executed public
  • 耐用功能是否适合大量活动?

    我有一个场景 需要计算 500k 活动 都是小算盘 由于限制 我只能同时计算 30 个 想象一下下面的简单示例 FunctionName Crawl public static async Task
  • 当前的 x86 架构是否支持非临时加载(来自“正常”内存)?

    我知道有关此主题的多个问题 但是 我没有看到任何明确的答案或任何基准测量 因此 我创建了一个处理两个整数数组的简单程序 第一个数组a非常大 64 MB 第二个数组b很小 无法放入 L1 缓存 程序迭代a并将其元素添加到相应的元素中b在模块化
  • strcmp 给出分段错误[重复]

    这个问题在这里已经有答案了 这是我的代码给出分段错误 include
  • WinRT 定时注销

    我正在开发一个 WinRT 应用程序 要求之一是应用程序应具有 定时注销 功能 这意味着在任何屏幕上 如果应用程序空闲了 10 分钟 应用程序应该注销并导航回主屏幕 显然 执行此操作的强力方法是在每个页面的每个网格上连接指针按下事件 并在触

随机推荐

  • win7无法访问服务器共享文件夹解决办法

    方案 今天的工作本来安排的好好的 本来都已经在开始高效的做事情了 因为服务器要安装一个驱动程序 在安装好了之后结果发现自己的电脑再也没有办法连接到服务器的共享了 真是恼火 造理说我也是可什么设置都没有动过啊 我就只是用下网络的共享服务而已那
  • Eclipse配置

    一 eclipse安装时选择的专门开发java项目的Eclipse IDE for Java Developers 因此没有new Dynamic Web Project 属于JavaEE 选项 方法1 直接安装JavaEE版本eclips
  • 开源ehr系统_国家通过开源EHR节省数百万美元

    开源ehr系统 自从2009年成为 经济和临床健康卫生信息技术 HITECH 法案 的基石以来 电子健康记录 EHR 在美国卫生系统中已无处不在 EHR使医疗保健提供者可以跟踪患者的医疗数据 并与其他授权方共享 VistA是美国退伍军人事务
  • orz项目编译的要点

    Orz 0 4 0 AllInOne iso 的编译指导 其实也没有什么需要指导的 只是想说明 这个过程是很容易的 要有信心 下载到Orz 0 4 0 AllInOne iso之后 按照文档readme hta来操作 因为这是个很老的教材
  • 2008.06.02 读华为前执行副总裁李玉琢的《我与商业领袖的合作与冲突》有感(三)

    理解一下书中提到的几点管理思想 和大家一起分享 1 柳传志的 搭班子 定战略 带队伍 这里需要注意的是搭班子 定战略 带队伍顺序不可乱 为什么这样说 一个组织只有先存在核心 才可能确定明确的战略 不同的核心 定出来的战略就可能不一样 因此是
  • 力扣202.快乐数(java语言HashSet方法,类双指针方法)

    前言 此题被分类到散列表算法题目中 但乍一看此题实在想不到如何去使用散列表 直到看了官方给的答案 题目描述 编写一个算法来判断一个数 n 是不是快乐数 快乐数 定义为 对于一个正整数 每一次将该数替换为它每个位置上的数字的平方和 然后重复这
  • 2021年度

    践行开源共创的精神 FISCO BCOS开源社区致力打造开放多元的开源联盟链生态 目前 社区已汇聚了超70000名社区用户 大家聚集于此碰撞观点 交流技术 围绕FISCO BCOS开发各类实用的应用组件 持续优化项目 并自发输出技术解析 使
  • 使用Java写入Excel下拉选择框选项过多不显示问题

    1 问题描述 工作中遇到需要使用Java poi读写Excel文件的问题 因为需求中有要求在写文件时创建下拉选择框 按照传统的直接使用List集合保存下拉选择框的选项 再通过poi本身的方法将选择框的选项添加到下拉框中 一开始编写demo测
  • 【01】花卉识别-基于tensorflow2.3实现

    2021年6月18日重大更新 目前已经退出bug修复之后的tensorflow2 3物体分类代码 大家可以训练自己的数据集 快来试试吧 csdn教程链接 手把手教你用tensorflow2 3训练自己的分类数据集 CSDN博客 b站视频链接
  • APP自动化测试-4. App控件交互

    APP自动化测试 4 App控件交互 文章目录 APP自动化测试 4 App控件交互 前言 一 元素常用的操作方法 二 元素的常用属性 总结 前言 简单介绍元素的操作方法和元素的属性 一 元素常用的操作方法 click 元素点击 send
  • Mybatis使用in传入List的三种方法

    1 非xml方式 使用注解传in 要使用 Select
  • 全国计算机等级考试三级数据库技术(十一)

    第十一章 故障管理 考点分析 在考试中一般情况下会出现在选择题 填空题部分 常考知识点有 1 掌握故障类型及相应的解决方法 2 掌握数据转储与日志文件的相关内容 3 掌握RAID的冗余技术和服务器容错技术 4 熟悉数据库镜像与数据库容灾 1
  • Java 实战项目-- 家庭记账程序

    模拟实现一个基于文本界面的 家庭记账软件 该软件能够记录家庭的收入 支出 并能够打印收支明细表 项目采用分级菜单方式 主菜单如下 具体要求 查询收支明细 菜单1 时 将显示所有的收入 支出名细列表 每次登记收入 菜单2 后 收入的金额应累加
  • 一、C语言初阶:指针

    1 指针 1 1 指针的算术运算 指针移动 int arr 1 2 3 4 5 int p arr int q 移动指针顺序打印 for int i 0 i lt 5 i q p i printf d q printf n 移动指针倒序打印
  •  RedHat 7.2 安装 Zabbix 监控程序详解(适合对linux初级用户)

    目录 RedHat 7 2 安装 Zabbix 监控程序详解 适合对linux初级用户 2020 0927 1 安装环境 查看环境 2 准备yum环境 3 安装LAMP架构 4 zabbix的安装和配置 4 1 第一次出现报错 4 2 第二
  • Rust——Macos安装使用

    进入官网会自动检测当前是什么操作系统 我的是Mac 所以使用官网给的命令安装就可以了 终端输入 curl proto https tlsv1 2 sSf https sh rustup rs sh 安装过程中 最后一步需要输入选择 输入1是
  • 光线追踪

    光追比较流行 其实很多公司也没用到 学习了下 就是反过来进行了 颜色从物体到像素 改为颜色从像素到物体了 碰撞检测就是射线和球之间的三角形关系 根据韦达定理可以判断 不相交 一个值或者两个值 即中学数学 上图
  • windows更改远程桌面端口命令和手动更改方法

    打开命令提示符窗口 按 Win R 快捷键 输入 cmd 然后按 Enter 键 输入以下命令并按 Enter 键 例子 reg add HKLM SYSTEM CurrentControlSet Control Terminal Serv
  • 买彩票能中大奖?用Java盘点常见的概率悖论

    引言 双色球头奖概率与被雷劈中的概率哪个高 3人轮流射击 枪法最差的反而更容易活下来 让我们用Java来探索ta们 悖论1 著名的三门问题 规则描述 你正在参加一个游戏节目 你被要求在三扇门中选择一扇 其中一扇后面有一辆车 其余两扇后面则是
  • C++进阶篇5:字符串查找

    在STL中 字符串查找可以实现多种功能 例如 搜索单个字符 搜索子串 实现前向搜索 后向搜索 分别实现搜索第一个和最后一个满足条件的字符 或子串 要明确的一点是 所有查找find 函数的返回值均是size type类型 即无符号整数类型 该