📜  C++中带示例的字符串:: npos(1)

📅  最后修改于: 2023-12-03 14:39:56.743000             🧑  作者: Mango

C++中带示例的字符串:: npos

C++中的字符串类库std::string提供了一个静态常量npos,该常量表示无效字符串位置,通常与std::string::findstd::string::rfind方法一起使用。本文将详细介绍std::string::npos的使用及示例。

定义

C++ STL 的string类中定义了一个静态常量std::string::npos,它表示一个无效的字符串位置。在string类的一些函数如:findrfindsubstr等中,如果查找失败,则返回npos

static constexpr size_type npos = -1;

size_type是一个未指定的无符号整数类型,通常它等于std::string::size_type类。C++17中,std::string::npos被替换为一个值为std::numeric_limits<std::string::size_type>::max()的类型。

用法

虽然npos被定义为一个无符号整数,但尽管它在算术上等价于-1。的确,在查找操作失败时,C++标准规定了返回-1。

size_type find(const char* s, size_type pos = 0) const noexcept;
size_type find(const char* s, size_type pos, size_type n) const noexcept;
size_type find(const std::string_view& sv, size_type pos = 0) const noexcept;
size_type find(const std::string& str, size_type pos = 0) const noexcept;
// 返回npos表示找不到子字符串
size_type rfind(const std::string& str, size_type pos = npos) const noexcept;
size_type rfind(const char* s, size_type pos = npos) const noexcept;
size_type rfind(const char* s, size_type pos, size_type n) const noexcept;

//返回npos只有在查找失败时。

例如,下面的代码使用std::string::find方法查找字符串中是否含有指定的子字符串。如果找到,将输出子字符串的位置,否则将输出npos

std::string str = "Hello, World!";
std::string sub_str = "World";
std::size_t pos = str.find(sub_str);
if (pos != std::string::npos)
    std::cout << "Substring found at position: " << pos << std::endl;
else
    std::cout << "Substring not found!" << std::endl;

输出结果:

Substring found at position: 7

如果字符串中没有找到子字符串,则输出npos

std::string str = "Hello, World!";
std::string sub_str = "Universe";
std::size_t pos = str.find(sub_str);
if (pos != std::string::npos)
    std::cout << "Substring found at position: " << pos << std::endl;
else
    std::cout << "Substring not found!" << std::endl;

输出结果:

Substring not found!
总结

std::string::npos是C++中std::string库的一个静态常量,表示一个无效的字符串位置。它通常用于std::string::findstd::string::rfind方法的查找失败时返回无效位置。在使用时,通常需要检查返回值是否等于npos,以判断查找是否成功。

示例代码:Github链接