C++ stringstream的使用

  • 要使用stringstream,必须包含头文件:
#include <sstream>
  • 通过重载的<<和>>运算符可以将文件流中的数据输出到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 <iostream>
#include <sstream>
using namespace std;

int main(){
	double x=6.6666;
	stringstream ss;
	string a;
	ss<<x;
	ss>>a;
	
	cout<<a<<endl;
	int y=8000005;
	//下次使用ss对象前需先清空 
	ss.clear();
//	ss.str("");

	ss<<y;
	ss>>a;
	
	cout<<a<<endl;
	cout<<ss.str()<<endl;
}

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 <iostream>
#include <sstream>
#include <algorithm>
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<<row;
		/*
		不清空的话将 stringstream定义成局部变量
		stringstream ss(row); 
		*/
		
		//从stringstream对象中以,为分隔读出数据 
		//终结符读掉但不存储 
		while(getline(ss,num,',')){
			a[++cnt]=stoi(num);
		}
		
		sort(a+1,a+cnt+1);
		for(int i=1;i<cnt;i++)
			cout<<a[i]<<",";
		cout<<a[cnt]<<endl;
	}

}

 

 


 

  • 6
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值