
C++ 中 substr 函数的用法
在C++中,std::string 类提供了一个名为 substr 的成员函数,用于从字符串中提取子串。这个函数非常有用,特别是在需要处理部分字符串内容时。以下是 substr 函数的基本用法和详细说明:
语法
std::string substr(size_t pos = 0, size_t len = npos) const;参数
- pos: 子串开始的位置(索引),从0开始计数。默认值为0,表示从字符串的开头提取。
- len: 要提取的子串的长度。默认值是 npos(通常是一个非常大的数,代表直到字符串末尾)。
返回值
- 返回一个新的 std::string 对象,包含从位置 pos 开始、长度为 len 的子串。如果 pos + len 超出了原字符串的长度,则返回的子串将只包含从 pos 到字符串末尾的部分。
示例代码
以下是一些使用 substr 函数的示例:
基本用法
#include <iostream> #include <string> int main() { std::string str = "Hello, World!"; std::string subStr = str.substr(7, 5); // 从索引7开始,提取5个字符 std::cout << "Substring: " << subStr << std::endl; // 输出: Substring: World return 0; }从特定位置到结尾
#include <iostream> #include <string> int main() { std::string str = "Hello, World!"; std::string subStr = str.substr(7); // 从索引7开始,一直到字符串末尾 std::cout << "Substring: " << subStr << std::endl; // 输出: Substring: World! return 0; }处理越界情况
#include <iostream> #include <string> int main() { std::string str = "Hello"; try { std::string subStr = str.substr(1, 10); // 从索引1开始,提取10个字符,但字符串长度不足 std::cout << "Substring: " << subStr << std::endl; } catch (const std::out_of_range& e) { std::cerr << "Error: " << e.what() << std::endl; // 输出: Error: basic_string::substr: __pos (which is 1) > this->size() (which is 5) } return 0; }空字符串
#include <iostream> #include <string> int main() { std::string str = ""; std::string subStr = str.substr(0, 2); // 空字符串,提取任何内容都是空字符串 std::cout << "Substring: " << subStr << std::endl; // 输出: Substring: return 0; }
注意事项
- 如果 pos 参数大于或等于字符串的长度,或者 pos + len 大于字符串的长度,将会抛出 std::out_of_range 异常。
- npos 是一个常量值,通常定义为最大可能的字符串大小,用来表示直到字符串末尾。
通过合理使用 substr 函数,可以方便地处理和操作字符串中的部分内容。
