std::basic_string<CharT,Traits,Allocator>::substr
来自 cppreference.com
< cpp | string | basic string
(1) | ||
basic_string substr( size_type pos = 0, size_type count = npos ) const; |
(直到 C++23) (从 C++20 开始为 constexpr) |
|
constexpr basic_string substr( size_type pos = 0, size_type count = npos ) const&; |
(从 C++23 开始) | |
constexpr basic_string substr( size_type pos = 0, size_type count = npos ) &&; |
(2) | (从 C++23 开始) |
返回一个子字符串 [
pos,
pos + count)
。如果请求的子字符串超过字符串的结尾,即 count 大于 size() - pos(例如,如果 count == npos),则返回的子字符串为 [
pos,
size()
)
。
1) 等效于 return basic_string(*this, pos, count);.
2) 等效于 return basic_string(std::move(*this), pos, count);.
内容 |
[编辑] 参数
pos | - | 要包含的第一个字符的位置 |
count | - | 子字符串的长度 |
[编辑] 返回值
包含子字符串 [
pos,
pos + count)
或 [
pos,
size()
)
的字符串。
[编辑] 异常
std::out_of_range 如果 pos > size().
如果出于任何原因抛出异常,这些函数不会产生任何影响 (强异常安全保证).
[编辑] 复杂度
与 count 线性相关。
[编辑] 注释
返回字符串的分配器是默认构造的:新的分配器可能不是 get_allocator()
的副本。
[编辑] 示例
运行此代码
#include <iostream> #include <string> int main() { std::string a = "0123456789abcdefghij"; // count is npos, returns [pos, size()) std::string sub1 = a.substr(10); std::cout << sub1 << '\n'; // both pos and pos + count are within bounds, returns [pos, pos + count) std::string sub2 = a.substr(5, 3); std::cout << sub2 << '\n'; // pos is within bounds, pos + count is not, returns [pos, size()) std::string sub4 = a.substr(a.size() - 3, 50); // this is effectively equivalent to // std::string sub4 = a.substr(17, 3); // since a.size() == 20, pos == a.size() - 3 == 17, and a.size() - pos == 3 std::cout << sub4 << '\n'; try { // pos is out of bounds, throws std::string sub5 = a.substr(a.size() + 3, 50); std::cout << sub5 << '\n'; } catch (const std::out_of_range& ex) { std::cout << ex.what() << '\n'; } }
可能的输出
abcdefghij 567 hij basic_string::substr: __pos (which is 23) > this->size() (which is 20)
[编辑] 缺陷报告
以下行为更改缺陷报告被追溯应用到之前发布的 C++ 标准。
DR | 应用于 | 发布的行为 | 正确行为 |
---|---|---|---|
LWG 847 | C++98 | 没有异常安全保证 | 添加了强异常安全保证 |
[编辑] 另请参阅
复制字符 (公共成员函数) | |
返回字符数 (公共成员函数) | |
查找给定子字符串的第一次出现 (公共成员函数) | |
[静态] |
特殊值。确切的含义取决于上下文 (公共静态成员常量) |
返回一个子字符串 ( std::basic_string_view<CharT,Traits> 的公共成员函数) |