简介:
<sstream> 定义了三个类:istringstream、ostringstream 和 stringstream,分别用来进行流的输入、输出和输入输出操作。本文以 stringstream 为主,介绍流的输入和输出操作。
<sstream> 主要用来进行数据类型转换,由于 <sstream> 使用 string 对象来代替字符数组(snprintf 方式),避免了缓冲区溢出的危险;而且,因为传入参数和目标对象的类型会被自动推导出来,所以不存在错误的格式化符号的问题。简单说,相比 C 编程语言库的数据类型转换,<sstream> 更加安全、自动和直接.
常用的函数:
stringstream.str();转化为字符串;所以可以用来输出stringstream
stringstream.str("")让流清空.
自动实现数据类型的转换:
在 C++ 中,字符串流(stringstream)是一种特殊的流类,它允许将字符串作为输入和输出流进行处理。字符串流提供了一种方便的方式,可以将字符串与其他基本类型进行转换、拼接、解析等操作。
string s="aaa"; stringstream line; line<< s; line << 1;//int line<<0.12; //float line<<'b'; //char cout<<line.str()<<endl; //结果为:aaa10.12b
两种构造方式:
string s="aaa"; //1. stringstream line; line<< s; //2. stringstream line(s);
区别在于:第二种方式在输入到stingstream的时候,之前的s会被覆盖;
所以一帮使用第一种构造方式.
比如:
string s="aaa"; //1. stringstream line; line<< s; //2. stringstream line(s); line << 1; //第一种的结果是:aaa1; //第二种的结果是:1aa;
分割字符串:
stringstream
默认是以空格来分割字符串的,利用stringstream
去除字符串空格非常方便:for(int i=1;i<=n;i++) { getline(cin,s);//读入一整行 stringstream line; line << s;//s输入到流中 while(line>>a[cnt])cnt++;//从流中输出到数组中,这样就过滤掉了空格 }