命名空间
变体
操作

std::basic_string<CharT,Traits,Allocator>::substr

来自 cppreference.com
< cpp‎ | string‎ | basic string
 
 
 
std::basic_string
成员函数
元素访问
迭代器
容量
修改器
搜索
操作
basic_string::substr
常量
非成员函数
I/O
比较
(直到 C++20)(直到 C++20)(直到 C++20)(直到 C++20)(直到 C++20)(C++20)
数值转换
(C++11)(C++11)(C++11)
(C++11)(C++11)
(C++11)(C++11)(C++11)
(C++11)
(C++11)
文字
辅助类
推导指南 (C++17)

 
(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 开始)

返回一个子字符串 [pospos + count)。如果请求的子字符串超过字符串的结尾,即 count 大于 size() - pos(例如,如果 count == npos),则返回的子字符串为 [possize())

1) 等效于 return basic_string(*this, pos, count);.
2) 等效于 return basic_string(std::move(*this), pos, count);.

内容

[编辑] 参数

pos - 要包含的第一个字符的位置
count - 子字符串的长度

[编辑] 返回值

包含子字符串 [pospos + count)[possize()) 的字符串。

[编辑] 异常

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> 的公共成员函数) [编辑]