C++引入了ostringstream、istringstream、stringstream这三个类,要使用他们创建对象就必须包含sstream头文件。
- istringstream类用于执行串流的输入操作。
- ostringstream类用于执行串流的输出操作。
- strstream类同时可以支持串流的输入输出操作。
istringstream类是从istream(输入流类)和stringstreambase(c++字符串流基类)派生而来,ostringstream是从ostream(输出流类)和stringstreambase(c++字符串流基类)派生而来,stringstream则是从iostream(输入输出流类)和和stringstreambase(c++字符串流基类)派生而来。
由于sstream使用string对象代替字符数组,避免缓冲区溢出的危险;其次,因为传入参数和目标对象的类型会被自动推导出来,所以不存在错误的格式化符的问题。相比c库的数据类型转换,sstream更加安全、自动和直接。
使用样例:
#include <sstream>
#include <string>
#include <iostream>
int main()
{
std::stringstream ss;
std::string str1, str2;
int iv = 10;
// 将int类型的值放入输入流中。
ss << iv << " is a test number.";
// 从sstream中抽取前面插入的int类型的值,赋给string类型。
// 以空格为分隔符。
ss >> str1 >> str2;
std::cout << "str1: " << str1 << std::endl;
std::cout << "str2: " << str2 << std::endl;
// 将sringstream类型转为string类型,以实现字符串拼接方法。
std::cout << "ss.str(): " << ss.str() << std::endl;
// 清空sstream的方法。
// 在进行多次类型转换前,必须先运行clear()
ss.str("");
ss.clear();
bool bl = true;
int it = 0;
ss << bl;
ss >> it;
std::cout << "(bool->int)it: " << it << std::endl;
ss.clear();
std::string str3 = "10";
ss << str3;
ss >> it;
std::cout << "(string->int)it: " << it << std::endl;
}
输出结果:
str1: 10
str2: is
ss.str(): 10 is a test number.
(bool->int)it: 1
(string->int)it: 10
参考: