sstream
<sstream> 提供字符串流,让字符串像文件一样可读写。
它特别适合做“字符串解析”和“字符串拼装”。
头文件与常见类型
#include <sstream>
常见类型:
| 类型 | 作用 |
|---|---|
std::istringstream | 从字符串读取数据 |
std::ostringstream | 向字符串写入数据 |
std::stringstream | 同时支持读写 |
字符串解析
#include <iostream>
#include <sstream>
#include <string>
int main() {
std::string line = "Tom 18 92.5";
std::istringstream iss(line);
std::string name;
int age;
double score;
iss >> name >> age >> score;
std::cout << name << ", " << age << ", " << score << '\n';
return 0;
}
字符串拼装
#include <iostream>
#include <sstream>
#include <string>
int main() {
std::ostringstream oss;
oss << "id=" << 1001 << ", score=" << 95.5;
std::string text = oss.str();
std::cout << text << '\n';
return 0;
}
stringstream 读写同体
#include <iostream>
#include <sstream>
int main() {
std::stringstream ss;
ss << 10 << ' ' << 20 << ' ' << 30;
int a, b, c;
ss >> a >> b >> c;
std::cout << a + b + c << '\n';
return 0;
}
常见用途
- 解析一行文本中的多个字段。
- 替代复杂字符串拼接,提升可读性。
- 在不依赖
atoi/sprintf的情况下完成类型转换。
与 C 风格方案对比
sstream类型安全,接口风格统一。sscanf/sprintf更接近格式模板,性能场景下有时更直接。- 工程里通常优先可维护性,
sstream更常见。
使用注意
- 读取失败会置流状态,可用
fail()检查。 - 重复使用同一个流对象时,可先
clear()再重新设置内容。 istringstream默认以空白分隔读取;若有复杂分隔符可结合getline。