- 内容提要
- 前言
- 第 1 章 预备知识
- 第 2 章 开始学习 C++
- 第 3 章 处理数据
- 第 4 章 复合类型
- 第 5 章 循环和关系表达式
- 第 6 章 分支语句和逻辑运算符
- 第 7 章 函数——C++的编程模块
- 第 8 章 函数探幽
- 第 9 章 内存模型和名称空间
- 第 10 章 对象和类
- 第 11 章 使用类
- 第 12 章 类和动态内存分配
- 第 13 章 类继承
- 第 14 章 C++中的代码重用
- 第 15 章 友元、异常和其他
- 第 16 章 string 类和标准模板库
- 第 17 章 输入、输出和文件
- 第 18 章 探讨 C++新标准
- 附录 A 计数系统
- 附录 B C++保留字
- 附录 C ASCII 字符集
- 附录 D 运算符优先级
- 附录 E 其他运算符
- 附录 F 模板类 string
- 附录 G 标准模板库方法和函数
- 附录 H 精选读物和网上资源
- 附录 I 转换为 ISO 标准 C++
- 附录 J 复习题答案
F.5 字符串搜索
string 类提供了 6 种搜索函数,其中每个函数都有 4 个原型。下面简要地介绍它们。
F.5.1 find( ) 系列
在 C++11 中,find( ) 的原型如下:
第一个返回 str 在调用对象中第一次出现时的起始位置。搜索从 pos 开始,如果没有找到子字符串,将返回 npos。
下面的代码在一个字符串中查找字符串“hat”的位置:
由于第二条搜索语句从位置 2 开始(That 中的 a),因此它找到的第一个 hat 位于字符串尾部。要测试是否失败,可使用 string::npos 值:
第二个方法完成同样的工作,但它使用字符数组而不是 string 对象作为子字符串:
第三个方法完成相同的工作,但它只使用字符串 s 的前 n 个字符。这与使用 basic_string(const charT * s,size_type n)构造函数,然后将得到的对象用作第一种格式的 find( ) 的 string 参数的效果完全相同。例如,下面的代码搜索子字符串“fun”:
第四个方法的功能与第一个相同,但它使用一个字符而不是 string 对象作为子字符串:
F.5.2 rfind( ) 系列
rfind( ) 方法的原型如下:
这些方法与相应 find( ) 方法的工作方式相似,但它们搜索字符串最后一次出现的位置,该位置位于 pos 之前(包括 pos)。如果没有找到,该方法将返回 npos。
下面的代码从字符串末尾开始查找子字符串“hat”的位置:
F.5.3 find_first_of( ) 系列
find_first_of( ) 方法的原型如下:
这些方法与对应 find( ) 方法的工作方式相似,但它们不是搜索整个子字符串,而是搜索子字符串中的字符首次出现的位置。
在 longer 中,首次出现的 fluke 中的字符是 funny 中的 f,而首次出现的 fat 中的字符是 That 中的 a。
F.5.4 find_last_of( ) 系列
find_last_of( ) 方法的原型如下:
这些方法与对应 rfind( ) 方法的工作方式相似,但它们不是搜索整个子字符串,而是搜索子字符串中的字符出现的最后位置。
下面的代码在一个字符串中查找字符串“hat”和“any”中字母最后出现的位置:
在 longer 中,最后出现的 hat 中的字符是 hat 中的 t,而最后出现的 any 中的字符是 hat 中的 a。
F.5.5 find_first_not_of( ) 系列
find_first_not_of( ) 方法的原型如下:
这些方法与对应 find_first_of( ) 方法的工作方式相似,但它们搜索第一个不位于子字符串中的字符。
下面的代码在字符串中查找第一个没有出现在“This”和“Thatch”中的字母:
在 longer 中,That 中的 a 是第一个在 This 中没有出现的字符,而字符串 longer 中的第一个空格是第一个没有在 Thatch 中出现的字符。
F.5.6 find_last_not_of( ) 系列
find_last_not_of( ) 方法的原型如下:
这些方法与对应 find_last_of( ) 方法的工作方式相似,但它们搜索的是最后一个没有在子字符串中出现的字符。
下面的代码在字符串中查找最后一个没有出现在“That.”中的字符:
在 longer 中,最后的空格是最后一个没有出现在 shorter 中的字符,而 longer 字符串中的 f 是搜索到位置 10 时,最后一个没有出现在 shorter 中的字符。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论