跳到主要内容
版本:Next

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;
}

常见用途

  1. 解析一行文本中的多个字段。
  2. 替代复杂字符串拼接,提升可读性。
  3. 在不依赖 atoi/sprintf 的情况下完成类型转换。

与 C 风格方案对比

  1. sstream 类型安全,接口风格统一。
  2. sscanf/sprintf 更接近格式模板,性能场景下有时更直接。
  3. 工程里通常优先可维护性,sstream 更常见。

使用注意

  1. 读取失败会置流状态,可用 fail() 检查。
  2. 重复使用同一个流对象时,可先 clear() 再重新设置内容。
  3. istringstream 默认以空白分隔读取;若有复杂分隔符可结合 getline