- 要使用stringstream,必须包含头文件:
#include
- 通过重载的<<和>>运算符可以将文件流中的数据输出到C++字符串中,它们之间的媒介是缓冲区streambuf
- stringstream通常用来做数据转换的,即可向流对象中写,又可读
1.将其他类型的变量转为string类型
一般我们都用str=to_string(x)方法来进行转换,通过stringstream中间做一个转换也可以做到。
stringstream对象(ss)常使用的两个方法
ss.clear():清除流的状态标志,但不会改变流中的内容。
ss.str(""):清空流中的数据,相当于无论之前流中的数据是什么,使用str("")之后,流数据为空,并且将状态符固定。
ss.str() 返回stringsteam中管理的全部string内容
***注意:
对同一个stringstream对象重复赋值时,就需要先对流使用clear()函数清空流的状态,此时流占用的内存没有改变,会一直增加(stringstream不主动释放内存),若想改变内存(一般是清除内存,减少内存消耗),需要再配合使用str("")清空stringstream的缓存。
//test1 #include#include using namespace std; int main(){ double x=6.6666; stringstream ss; string a; ss< >a; cout<>a; cout<
2.通过stringstream对一行字符串指定字符进行分割
这里顺便提一下getline()方法和cin.getline()方法
当我们要读取的字符串包含空格时,常用getline函数进行读取,其函数参数有三个。
getline(istream, string, char)
istream是进行读入操作的输入流
string 存储读入的串的内容
char 终止符,遇到该终止符结束输入。省略时,默认读取一行换行符前面的所有字符(包括换行符,但换行符虽读却不存储,也就是说存储的串中不包含换行符)。cin.getline也可接收三个参数,一个是字符数组首地址,第二个是接受字符个数,第三个是终止符。
例题:
输入:多个测试用例,每个测试用例一行, 数据之间通过','隔开。
54,32,78 8,4,3,6,11,8,1 1 41,20,2输出
32,54,78 1,3,4,6,8,8,11 1 20,22,41
代码
#include#include #include using namespace std; const int N=1000; int a[N]; int main(){ int sum,cnt; stringstream ss; string row,num; while(getline(cin,row)){ sum=0; cnt=0; ss.clear(); ss.str(""); ss< |



