字符串流sstream,及输入输出流iostream的学习

iostream库 包含了以下三个标准流对象

istream类对象,包含了cin标准输入(standard input)
ostream类对象,包含了cout标准输出 (stand output)
osttream类对象,包含了cerr标准错误 (stand error)

在C++中有两种字符串流,也称为数组I/O流,其中一种在sstream中定义 另一种在strstream中定义。两者实现的功能基本一致

其中
strstream里包含
class strstreambuf;
class isstream;
class ostream;
class strstream;
它们是基于C语言类型字符串char*编写的。

sstream非常重要的一个头文件系列

sstream库中定义了三种类istringstream、ostringstream、stringstream
分别用来进行流的(输入)、(输出)、和 (输入/输出)操作

sstream中还包含了
class istringstream;
class ostringstream;
class stringstream;
class stringbuf;
class ……
它们是基于std::string编写的。//因此这个得在using namespace std;命名空间中
所以ostream::str()返回的是char*类型的字符串,
而ostringstream::str()返回的是std::string类型的字符串.

注意在使用的时候要注意两者的区别,一般情况下建议使用std::string类型的字符串。
为了保持和C的兼容,使用strstream也还可以。
but,记住,strstream虽然是C++语言标准的一部分,但已被C++宣称为"deprecated",即不提倡使用了,
故想导入strstream可能得设定具体环境

所以一般直接通过stringstream来实例化对象

**

示例1:istringstream 字符输入流的学习实例

**

#include<iostream>
#include<string>
#include<sstream>
using namespace std;
int main()
{
	//以空格为边界符,输入流
	string line="L N T U";	//首先定义一个字符串
	char a,b,c,d;
	istringstream sin(line);	//istringstream为输入流 
	
	sin>>a>>b>>c>>d;
	cout<<a<<" "<<b<<" "<<c<<" "<<d<<endl; 	//输出了L N T U,其中a,b,c,d都被输入赋值了
	//字符串赋值类似如此
	//若要输入一串字符且以enter标志为结束呢
	string str1;
	istringstream sin2(line);
	getline(sin2,str1);	//输入一串字符以enter标志输入结束
	cout<<str1<<endl; 	//同样输出了L N T U,而非单一"L" 
	return 0;
}

**

示例2:ostringstream的用法

**

#include<iostream>
#include<string>
#include<sstream>
using namespace std;
int main()
{
	string s="test";
	int i=2019126;
	ostringstream sout;
	sout<<s<<" "<<i;
	cout<<sout.str()<<endl;		//连接成了 test 2019126,所以输出的即为test 2019126 
	return 0;
}

**

示例3:简便写法

**

#include<iostream>
#include<string>
#include<sstream>
using namespace std;
int main()
{
	string str="test";
	char a,b,c,d;
	int i=2019126;
	stringstream ss(str);	//流初始为str字符串 
	ss>>a>>b>>c>>d;			//将流内字符串赋值给a,b,c,d注:复制完后流内字符串相当于是给了当前字符串,流字符串会减少 
	cout<<a<<" "<<b<<" "<<c<<" "<<d<<endl;		//输出了t e s t 
	ss<<str<<" "<<i;			//str加空格和i输出到ss流中 
	cout<<ss.str()<<endl;		//连接成了 test 2019126,所以输出的即为test 2019126 
	return 0;
}

转载请标明出处,喜欢代码可以关注我一起学习Y

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值