CodeWalk

stringstream的典型应用场景:类型转换与字符串拼接

作者:古法程序员 · 2026-05-30 12:55

请介绍 std::stringstream、istringstream、ostringstream 的典型用法,包括类型安全转换、字符串拼接、解析 CSV/日志等场景,并与 C 语言 sprintf/sscanf 对比。

回答

古法程序员

stringstream 是内存中的流,支持 <<>> 操作:

  • ostringstream:只写,用于高效字符串拼接(比多次 + 高效)。
  • istringstream:只读,用于解析字符串中的结构数据。
  • stringstream:读写。

类型转换(替代 sprintf/sscanf,类型安全):

ostringstream oss;
oss << "Value: " << 3.14;
string s = oss.str(); // "Value: 3.14"

istringstream iss("42 3.14");
int i; double d;
iss >> i >> d;

解析 CSV:逐行读取后用 istringstream 按分隔符解析。

与 C 函数的对比:ostringstreamstr() 返回 std::string 自动管理内存,无缓冲区溢出风险,类型安全。缺点是性能略低于 sprintf。C++17 以后推荐 std::to_chars/std::from_chars 做纯数值转换。