substr是C++中用于提取子串的string成员函数,语法为substr(pos, len),从pos开始截取最多len个字符;示例包括提取"Hello, World!"中"World"或后缀,常用于获取文件名或扩展名,需注意pos越界会抛异常,但允许pos等于字符串长度返回空串。

在C++中,substr 是 std::string 类的一个成员函数,用于从字符串中提取子串。它使用简单,功能强大,是处理字符串截取的常用方法。
函数原型
string substr(size_t pos = 0, size_t len = npos) const;
该函数有两个参数:
- pos:起始位置(索引),默认为0,即从开头开始
- len:要截取的字符个数,如果超出字符串长度,则截取到末尾
返回值是一个新的 string 对象,包含指定的子串。
立即学习“C++免费学习笔记(深入)”;
基本用法示例
假设有一个字符串:
std::string str = "Hello, World!";
- 从第7个字符开始,截取5个字符:
str.substr(7, 5)→ 结果是 "World" - 从第7个字符开始,截取到末尾:
str.substr(7)→ 结果是 "World!" - 只取前5个字符:
str.substr(0, 5)→ 结果是 "Hello"
注意事项
使用 substr 时需注意以下几点:
- 索引 pos 必须小于字符串长度,否则会抛出 std::out_of_range 异常
- 如果 pos 等于字符串长度,允许操作,返回空字符串
- len 可以大于剩余字符数,函数会自动调整为到末尾为止
例如:
std::string s = "abc"; std::cout << s.substr(3, 2); // 合法,返回空串 std::cout << s.substr(4, 2); // 抛出异常!位置越界
实际应用场景
常见用途包括:
- 提取文件扩展名:
filename.substr(filename.find_last_of('.') + 1); - 获取路径中的文件名:
path.substr(path.find_last_of('/') + 1); - 分割字符串(配合 find 使用)
基本上就这些。掌握 substr 的用法,能让你更灵活地处理字符串截取任务。注意边界检查,避免运行时异常。











