public member function
<string>

std::basic_string::substr

basic_string substr (size_type pos = 0, size_type len = npos) const;
生成子字符串
返回一个新构造的 basic_string 对象,其值初始化为此对象的子字符串的副本。

子字符串是对象中从字符位置 pos 开始并跨越 len 个字符的部分(或者直到字符串的末尾,以先到者为准)。

参数

pos
要复制为子字符串的第一个字符的位置。
如果这等于字符串长度,则该函数返回一个空字符串。
如果这大于字符串长度,则会抛出 out_of_range 异常。
注意:第一个字符用值表示0(不是1).
len
要包含在子字符串中的字符数(如果字符串较短,则使用尽可能多的字符)。
basic_string::npos值表示直到字符串末尾的所有字符。

成员类型size_type是一种无符号整型类型。

返回值

一个 basic_string 对象,包含此对象的子字符串。

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
// string::substr
#include <iostream>
#include <string>

int main ()
{
  std::string str="We think in generalities, but we live in details.";
                                              // (quoting Alfred N. Whitehead)

  std::string str2 = str.substr (12,12);         // "generalities"

  std::string::size_type pos = str.find("live"); // position of "live" in str

  std::string str3 = str.substr (pos);           // get from "live" to the end

  std::cout << str2 << ' ' << str3 << '\n';

  return 0;
}

输出
generalities live in details.


复杂度

未指定,但通常与返回对象的 长度 成线性关系。

迭代器有效性

没有变化。

数据竞争

该对象被访问。

异常安全

强保证: 如果抛出异常,则 basic_string 中没有任何更改。

如果 pos 大于 字符串长度,则会抛出 out_of_range 异常。
如果该类型使用默认分配器,如果函数需要分配存储空间但失败,则会抛出bad_alloc异常。

另见