【C++】C++中的find方法介绍

目录

一.find方法基本用法

1.查找字符

2.查找子字符串

3.查找子字符串(从指定位置开始)

4.查找字符范围

5.查找不包含特定字符的范围

二.使用string::npos返回无效位置

三.总结


在C++中, std::string 类的 find 成员函数用于查找子字符串在字符串中的位置。 find 函数有多个重载版本,允许你以不同的方式执行查找操作。

一.find方法基本用法

cpp 复制代码
#include <iostream>
#include <string>

int main() {
    std::string str = "Hello World!";
    size_t pos = str.find("World");
    if (pos != std::string::npos) {
        std::cout << "Found 'World' at position: " << pos << std::endl;
    } else {
        std::cout << "The substring 'World' was not found." << std::endl;
    }
    return 0;
}

在这个示例中, find 被用来查找子字符串 "World" 在字符串 str 中的位置。如果找到了, pos 将包含子字符串的起始索引;如果没有找到, pos 将被设置为 std::string::npos 。

1.查找字符

cpp 复制代码
size_t pos = str.find('o');

这个调用查找字符 'o' 在字符串中的位置。

2.查找子字符串

cpp 复制代码
size_t pos = str.find("World");

这个调用查找子字符串 "World" 在字符串中的位置。

3.查找子字符串(从指定位置开始)

cpp 复制代码
size_t pos = str.find("World", 6);

这个调用从索引 6 开始查找子字符串 "World" 。

4.查找字符范围

cpp 复制代码
size_t pos = str.find_first_of("lo");

这个调用查找任何 "lo" 中的字符在字符串中第一次出现的位置。还有 find_last_of 来查找最后一次出现的位置。

5.查找不包含特定字符的范围

cpp 复制代码
size_t pos = str.find_first_not_of("Hdle");

这个调用查找第一个不是 "Hdle" 中的字符的位置。 find_last_not_of 用于查找最后一次出现的位置。

二.使用string::npos返回无效位置

string::npos 是 C++ 标准库中 std::string 类型的一个静态成员常量,表示"未找到"或"无效位置"。当你使用 std::string 的某些方法,如 find 、 rfind 、 find_first_of 等,它们返回一个位置索引时,如果没有找到指定的子字符串或字符,这些方法就会返回 string::npos 。

例如:

cpp 复制代码
std::string str = "Hello, World!";
size_t pos = str.find("test");

if (pos == std::string::npos) {
    // 没有找到子字符串 "test"
}

在这个例子中,如果 str 中没有 "test" 这个子字符串, pos 将被赋值为 string::npos 。

它的值是 std::string 类型能够表示的最大大小加一(通常是 size_t(-1) )。

三.总结

find 函数是 std::string 类中非常有用的成员函数之一,它提供了灵活的方式来查找子字符串或字符。使用 npos 可以检查查找操作是否成功。

相关推荐
luj_17684 小时前
桥牌思维启示:系统设计的模块化架构
c语言·开发语言·c++·经验分享·算法
会周易的程序员4 小时前
aiDgePLC iec61131 虚拟机 完整使用文档
c++·物联网·架构·st·iec61131
小小龙学IT5 小时前
Boost.Beast 深度实战:基于 Asio 的开源 C++ HTTP/WebSocket 协议库
c++·websocket·http
不可求~6 小时前
C++ std::string_view 不是字符串:从悬空引用到安全用法
java·开发语言·c++
小小龙学IT6 小时前
C++ 正则表达式完全指南:从 std::regex 实战到 RE2 引擎原理(NFA/DFA/回溯陷阱)
c++·正则表达式
码匠许师傅10 小时前
【C++ 面试真题】聊聊 C++ 的序列容器
java·c++·面试
C++ 老炮儿的技术栈10 小时前
Qt5.9.1 Windows 完整开发环境搭建流程
开发语言·c++·windows·qt·编辑器·代码化
欧特克_Glodon10 小时前
OpenCV计算机视觉开发入门与实践<十一>:矩阵的复制和矩形类Rect
c++·opencv·计算机视觉·矩阵
键盘会跳舞11 小时前
C++:std::tuple 源码级深度拆解——变参模板、SFINAE与模板元编程核心技巧
开发语言·c++·sfinae·变参模板
bkspiderx11 小时前
从零开始:VS Code搭建C/C++开发环境全指南(Windows/macOS/Linux)
c语言·c++·windows·vs code·c/c++开发环境