c++stringsubstr的简单介绍

## C++ 字符串 substr 函数

简介

`substr()` 是 C++ 中用于提取字符串子串的函数。它允许你从一个字符串中提取一个指定长度的子串,并返回一个新的字符串对象。 这在文本处理、字符串操作和数据分析等方面非常有用。 本文将详细介绍 `substr()` 函数的用法、参数、返回值以及一些示例。### 头文件在使用 `substr()` 函数之前,你需要包含 `` 头文件:```c++ #include ```### 函数原型`substr()` 函数有两种常用的原型:1.

`std::string substr(size_t pos = 0, size_t len = npos) const;`

`pos`: 起始位置(索引),默认为 0(字符串的开头)。

`len`: 子串的长度。 默认为 `std::string::npos`,表示从 `pos` 开始到字符串结尾。

`const`: 表明此函数不会修改原始字符串。 返回的是一个新的字符串对象。2. (C++20 及更高版本)

`std::string substr(size_t pos, size_t count = npos) const noexcept;`

此版本与版本1的功能相同,只是将`len`参数更名为`count`,并且添加了`noexcept`说明符,表明此函数不会抛出异常。### 参数详解

`pos` (起始位置):

这是一个无符号整型值,表示子串的起始位置。索引从 0 开始,0 代表字符串的第一个字符。如果 `pos` 超过字符串的长度,则返回一个空字符串。

`len` / `count` (子串长度):

这是一个无符号整型值,表示要提取的子串的长度。如果 `len` 大于从 `pos` 开始到字符串结尾的剩余长度,则返回从 `pos` 开始到字符串结尾的子串。

`std::string::npos`:

这是一个特殊的值,表示字符串的最大长度。 当 `len` 设置为 `std::string::npos` 时,`substr()` 函数将返回从 `pos` 开始到字符串结尾的所有字符。### 返回值`substr()` 函数返回一个新的字符串对象,该对象包含从原始字符串提取的子串。 原始字符串保持不变。### 示例```c++ #include #include int main() {std::string str = "Hello, world!";// 从索引 0 开始,提取 5 个字符std::string sub1 = str.substr(0, 5); // sub1 = "Hello"std::cout << "sub1: " << sub1 << std::endl;// 从索引 7 开始,提取到字符串结尾std::string sub2 = str.substr(7); // sub2 = "world!"std::cout << "sub2: " << sub2 << std::endl;// 从索引 13 开始,提取 2 个字符 (即使超出实际长度也不会报错)std::string sub3 = str.substr(13, 2); // sub3 = ""std::cout << "sub3: " << sub3 << std::endl;// 从索引 12 开始提取到末尾,即使索引超出了字符串长度std::string sub4 = str.substr(12); // sub4 = "!"std::cout << "sub4: " << sub4 << std::endl;//使用npos 从索引 7 开始提取到末尾std::string sub5 = str.substr(7, std::string::npos); // sub5 = "world!"std::cout << "sub5: " << sub5 << std::endl;return 0; } ```### 异常处理 (C++20 之前)在 C++20 之前,如果 `pos` 超过了字符串长度,`substr` 函数的行为是未定义的,可能会导致程序崩溃。在 C++20 及之后,添加了`noexcept`说明符,保证不会抛出异常,返回一个空字符串。 为了确保代码的健壮性,建议在 C++20 之前的版本中,在调用 `substr()` 之前检查 `pos` 的值是否有效。### 总结`substr()` 函数是一个强大的工具,用于从 C++ 字符串中提取子串。 理解其参数和返回值,并谨慎处理潜在的错误(在C++20之前),可以有效地提高你的 C++ 字符串操作效率。 记住要包含 `` 头文件。

C++ 字符串 substr 函数**简介**`substr()` 是 C++ 中用于提取字符串子串的函数。它允许你从一个字符串中提取一个指定长度的子串,并返回一个新的字符串对象。 这在文本处理、字符串操作和数据分析等方面非常有用。 本文将详细介绍 `substr()` 函数的用法、参数、返回值以及一些示例。

头文件在使用 `substr()` 函数之前,你需要包含 `` 头文件:```c++

include ```

函数原型`substr()` 函数有两种常用的原型:1. **`std::string substr(size_t pos = 0, size_t len = npos) const;`*** `pos`: 起始位置(索引),默认为 0(字符串的开头)。* `len`: 子串的长度。 默认为 `std::string::npos`,表示从 `pos` 开始到字符串结尾。* `const`: 表明此函数不会修改原始字符串。 返回的是一个新的字符串对象。2. (C++20 及更高版本) **`std::string substr(size_t pos, size_t count = npos) const noexcept;`*** 此版本与版本1的功能相同,只是将`len`参数更名为`count`,并且添加了`noexcept`说明符,表明此函数不会抛出异常。

参数详解* **`pos` (起始位置):** 这是一个无符号整型值,表示子串的起始位置。索引从 0 开始,0 代表字符串的第一个字符。如果 `pos` 超过字符串的长度,则返回一个空字符串。* **`len` / `count` (子串长度):** 这是一个无符号整型值,表示要提取的子串的长度。如果 `len` 大于从 `pos` 开始到字符串结尾的剩余长度,则返回从 `pos` 开始到字符串结尾的子串。* **`std::string::npos`:** 这是一个特殊的值,表示字符串的最大长度。 当 `len` 设置为 `std::string::npos` 时,`substr()` 函数将返回从 `pos` 开始到字符串结尾的所有字符。

返回值`substr()` 函数返回一个新的字符串对象,该对象包含从原始字符串提取的子串。 原始字符串保持不变。

示例```c++

include

include int main() {std::string str = "Hello, world!";// 从索引 0 开始,提取 5 个字符std::string sub1 = str.substr(0, 5); // sub1 = "Hello"std::cout << "sub1: " << sub1 << std::endl;// 从索引 7 开始,提取到字符串结尾std::string sub2 = str.substr(7); // sub2 = "world!"std::cout << "sub2: " << sub2 << std::endl;// 从索引 13 开始,提取 2 个字符 (即使超出实际长度也不会报错)std::string sub3 = str.substr(13, 2); // sub3 = ""std::cout << "sub3: " << sub3 << std::endl;// 从索引 12 开始提取到末尾,即使索引超出了字符串长度std::string sub4 = str.substr(12); // sub4 = "!"std::cout << "sub4: " << sub4 << std::endl;//使用npos 从索引 7 开始提取到末尾std::string sub5 = str.substr(7, std::string::npos); // sub5 = "world!"std::cout << "sub5: " << sub5 << std::endl;return 0; } ```

异常处理 (C++20 之前)在 C++20 之前,如果 `pos` 超过了字符串长度,`substr` 函数的行为是未定义的,可能会导致程序崩溃。在 C++20 及之后,添加了`noexcept`说明符,保证不会抛出异常,返回一个空字符串。 为了确保代码的健壮性,建议在 C++20 之前的版本中,在调用 `substr()` 之前检查 `pos` 的值是否有效。

总结`substr()` 函数是一个强大的工具,用于从 C++ 字符串中提取子串。 理解其参数和返回值,并谨慎处理潜在的错误(在C++20之前),可以有效地提高你的 C++ 字符串操作效率。 记住要包含 `` 头文件。

标签列表