📅  最后修改于: 2023-12-03 14:39:56.743000             🧑  作者: Mango
C++中的字符串类库std::string
提供了一个静态常量npos
,该常量表示无效字符串位置,通常与std::string::find
和std::string::rfind
方法一起使用。本文将详细介绍std::string::npos
的使用及示例。
C++ STL 的string
类中定义了一个静态常量std::string::npos
,它表示一个无效的字符串位置。在string
类的一些函数如:find
、rfind
、substr
等中,如果查找失败,则返回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::find
和std::string::rfind
方法的查找失败时返回无效位置。在使用时,通常需要检查返回值是否等于npos
,以判断查找是否成功。
示例代码:Github链接