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