stringstream的典型应用场景:类型转换与字符串拼接
请介绍 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 函数的对比:ostringstream 的 str() 返回 std::string 自动管理内存,无缓冲区溢出风险,类型安全。缺点是性能略低于 sprintf。C++17 以后推荐 std::to_chars/std::from_chars 做纯数值转换。