什么是 substr 方法?
substr
是 C++ 标准库中 std::string
类提供的一个非常实用的成员函数,用于从字符串中提取子串。这个方法允许你从一个字符串中获取指定位置和长度的部分内容,而无需修改原始字符串。
方法原型
在 C++ 中,substr
方法有两个重载版本:
string substr(size_t pos = 0, size_t len = npos) const;
参数解释
-
pos (第一个参数)
-
类型:
size_t
-
默认值:0
-
说明:指定子串开始的位置(从0开始计数)。如果 pos 等于字符串长度,函数返回空字符串。如果 pos 大于字符串长度,会抛出
std::out_of_range
异常。
-
-
len (第二个参数)
-
类型:
size_t
-
默认值:
npos
(一个特殊值,表示直到字符串末尾) -
说明:要包含在子串中的字符数。如果 len 大于从 pos 开始到字符串末尾的字符数,或者 len 是
npos
,则子串将延续到字符串的末尾。
-
返回值
substr
方法返回一个新的 std::string
对象,包含从原始字符串中提取的子串。原始字符串不会被修改。
使用示例
基本用法
#include <iostream>
#include <string>
int main() {
std::string str = "Hello, World!";
// 从位置7开始提取子串(默认到字符串末尾)
std::string sub1 = str.substr(7);
std::cout << sub1 << std::endl; // 输出: World!
// 从位置0开始,提取5个字符
std::string sub2 = str.substr(0, 5);
std::cout << sub2 << std::endl; // 输出: Hello
// 使用默认参数(相当于 str.substr(0))
std::string sub3 = str.substr();
std::cout << sub3 << std::endl; // 输出: Hello, World!
return 0;
}
注意事项
-
索引从0开始:C++ 中字符串的索引是从0开始的,第一个字符的位置是0。
-
异常处理:当 pos 超出字符串长度时,会抛出
std::out_of_range
异常。 -
性能考虑:
substr
会创建一个新的字符串对象,这意味着有内存分配和复制的开销。在性能敏感的代码中要谨慎使用。 -
npos 的特殊含义:
npos
是std::string
中的一个静态常量,表示"直到字符串末尾"或"最大可能的位置"。