C++ sstream 字符数据流的使用

简介:

1 iostream支持程序和终端之间的I/O;

2 fstream支持程序和文件之间的I/O;

3 sstream支持程序和字符对象之间的I/O


sstream使用:

1 istringstream只允许读出字符,可以使用.str(s)初始化,不允许使用<<操作符

int main() 
{
	string s = "-3745 djjkf this ia s very good example";
	istringstream ss;
	ss.str(s);
	string sout;
	while (ss>>sout)
		cout<<sout<<endl;
	system("pause"); 
	return 0;
}




2 ostringstream只允许读入信息,使用<<,不允许使用>>操作,也可以使用.str(s)初始化。

注意:

1) 使用了str(s)初始化,那么当前读入的位置不变,继续使用<<就会覆盖str()初始化的内容

2) 重新使用str(s)也会覆盖前面所有内容

int main() 
{
	string s = "-3745 djjkf this ia s very good example";
	ostringstream ss;
	ss.str(s);
	string a = "HELLOWORLD";
	ss<<a;
	ss<<a;
	cout<<ss.str();
	system("pause"); 
	return 0;
}



3 stringstream兼具了前面两者的功能和特性

注意:

1 连续操作输入数据,需要使用clear()清空输入状态;

注意不是清空内容,是允许继续输入的意思,原来的内容还可以使用.str()读出。网上有人争论这个问题,其实也没什么好研究的,多动手,不能光凭手册理解判断。

2 要想实现真正清空,并重新输入数据需要使用.str("")和.clear()配合使用

int main() 
{
	string s = "-3745 djjkf this ia s very good example";
	stringstream ss;
	string a = "856";
	ss<<a;
	int i = 100;
	ss>>i;
	cout<<i<<endl;
	ss.clear();
	ss<<"000";
	cout<<ss.str()<<endl;

	ss.str("");
	ss.clear();
	ss<<"123";
	int j;
	ss>>j;
	cout<<j<<endl;
	cout<<ss.str();
	system("pause"); 
	return 0;
}



暂时没发现STL里面有好用的分隔符分隔函数,好像要使用strtok函数或者boost 的split,感觉和自己写函数实现没多大区别,方便不到哪里去。



  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值