C++ string查找方法

C++ string查找方法

内容

在 C++ 中,std::string 提供了多种方法获取特定字符或子字符串的位置。以下是常见操作的详细说明和示例:


1. 查找字符的首次出现位置

使用 find() 方法获取字符第一次出现的索引:

#include <string>
#include <iostream>

int main() {
    std::string str = "hello world";
    size_t pos = str.find('o');  // 查找字符 'o' 的首次出现位置

    if (pos != std::string::npos) {
        std::cout << "字符 'o' 首次出现在位置: " << pos << std::endl;  // 输出 4
    } else {
        std::cout << "未找到字符" << std::endl;
    }
    return 0;
}

2. 查找字符的最后一次出现位置

使用 rfind() 方法从后向前查找字符:

size_t pos = str.rfind('o');  // 查找字符 'o' 的最后一次出现位置
// 输出: 字符 'o' 最后一次出现在位置: 7

3. 查找多个字符中的任意一个

使用 find_first_of() 查找给定字符集合中的第一个匹配项:

size_t pos = str.find_first_of("aeiou");  // 查找第一个元音字母的位置
// 输出: 第一个元音字母在位置: 1 ('e')

4. 从指定位置开始查找

通过第二个参数指定起始搜索位置:

size_t pos = str.find('l', 3);  // 从索引 3 开始查找 'l'
// 输出: 位置: 3(字符串 "lo world" 中的第一个 'l')

5. 查找所有出现的位置

通过循环遍历所有匹配项:

size_t start_pos = 0;
char target = 'l';

std::cout << "字符 'l' 出现的位置: ";
while ((start_pos = str.find(target, start_pos)) != std::string::npos) {
    std::cout << start_pos << " ";  // 输出: 2 3 9
    start_pos++;  // 移动到下一个位置继续查找
}

6. 未找到时的处理

若未找到字符,返回值为 std::string::npos

size_t pos = str.find('z');
if (pos == std::string::npos) {
    std::cout << "字符 'z' 未找到" << std::endl;
}

关键方法总结

方法 功能 示例
find(char, start) 查找字符首次出现位置 str.find('o', 0) → 4
rfind(char, start) 从后向前查找字符位置 str.rfind('o') → 7
find_first_of(chars) 查找字符集合中的首个匹配项 str.find_first_of("aeiou") → 1
find_last_of(chars) 查找字符集合中的最后一个匹配项 str.find_last_of("aeiou") → 7

注意事项

  1. 返回值类型:所有方法返回 size_t 类型,若未找到返回 std::string::npos(通常为 18446744073709551615)。
  2. 大小写敏感:查找区分大小写,若需忽略大小写,需先转换字符串(如 std::tolower)。
  3. 性能find 的时间复杂度为 O(n),多次查找需注意效率。

通过合理使用这些方法,可以高效操作字符串中的字符位置。

本文作者:Gold_stein

本文链接:https://www.cnblogs.com/smartljy/p/18749722

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   Gold_stein  阅读(17)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· AI与.NET技术实操系列(六):基于图像分类模型对图像进行分类
历史上的今天:
2024-03-04 P8681 [蓝桥杯 2019 省 AB] 完全二叉树的权值
2024-03-04 ACWing 247.亚特兰蒂斯
2024-03-04 246. 区间最大公约数
点击右上角即可分享
微信分享提示
💬
评论
📌
收藏
💗
关注
👍
推荐
🚀
回顶
收起
🔑
  1. 1 逃离地面 RAD & 三浦透子
逃离地面 - RAD & 三浦透子
00:00 / 00:00
An audio error has occurred.

作词 : 野田洋次郎

作曲 : 野田洋次郎

空飛ぶ羽根と引き換えに 繋ぎ合う手を選んだ僕ら

それでも空に魅せられて 夢を重ねるのは罪か

夏は秋の背中を見て その顔を思い浮かべる

憧れなのか、恋なのか 叶わぬと知っていながら

重力が眠りにつく 1000年に一度の今日

太陽の死角に立ち 僕らこの星を出よう

彼が眼を覚ました時 連れ戻せない場所へ

「せーの」で大地を蹴って ここではない星へ

行こう

もう少しで運命の向こう もう少しで文明の向こう

もう少しで運命の向こう もう少しで

夢に僕らで帆を張って 来たるべき日のために夜を超え

いざ期待だけ満タンで あとはどうにかなるさと 肩を組んだ

怖くないわけない でも止まんない

ピンチの先回りしたって 僕らじゃしょうがない

僕らの恋が言う 声が言う

「行け」と言う