istringstream类用于执行C++风格的串流的输入操作。
ostringstream类用于执行C++风格的串流的输出操作。
strstream类同时可以支持C++风格的串流的输入输出操作。
【1】istringstream类从一个string对象读取字符
代码:
#include <iostream>
#include <sstream>
using namespace std;
int main()
{
istringstream istr;
string s="1 5.4 c";
istr.str(s);//构造字符串流的时候,空格会成为字符串参数的内部分界,例子中对a,b对象的输入"赋值"操作证明了这一点,字符串的空格成为了整型数据与浮点型数据的分解点
//上述两个过程可以简单写成 istringstream istr("1 5.4 c");
//另一种形式读入istr.str("1 5.4 c");
cout << istr.str() << endl;
int a;
char t;
float b;
istr >> a;
cout << a << endl;
istr >> b;
cout << b << endl;
istr>>t;
cout<<t<<endl;
return 0;
}
上例中,构造字符串流的时候,空格会成为字符串参数的内部分界,例子中对a,b对象的输入”赋值”操作证明了这一点,字符串的空格成为了整型数据与浮点型数据的分解点,利用分界获取的方法我们事实上完成了字符串到整型对象与浮点型对象的拆分转换过程。
str()成员函数的使用可以让istringstream对象返回一个string字符串
【2】ostringstream类向一个string插入字符。
代码:
#include <iostream>
#include <sstream>
#include <string>
using namespace std;
int main()
{
ostringstream ostr;
ostr.str("abc");//如果构造的时候设置了字符串参数,那么增长操作的时候不会从结尾开始增加,而是修改原有数据,超出的部分增长,换句话来说
ostr.put('d'); //只能操作单个字符,是往ostr.str()里输入字符;
ostr.put('e');
string s="fg";
ostr<<s;
// ostr<<"fg";//操作字符串或单个字符;ostr<<'f';
string gstr = ostr.str();
cout<<gstr<<endl;
}
在上例代码中,我们通过put()或者左移操作符可以不断向ostr插入单个字符或者是字符串,通过str()函数返回增长过后的完整字符串数据,但值 得注意的一点是,当构造的时候对象内已经存在字符串数据的时候,那么增长操作的时候不会从结尾开始增加,而是修改原有数据,超出的部分增长。
【3】stringstream用于C++风格的字符串的输入输出的
代码:
#include <iostream>
#include <sstream>
#include <string>
using namespace std;
int main()
{
stringstream ostr("ccc");
ostr.put('d');
ostr.put('e');
ostr<<"fg";
string gstr = ostr.str();
cout<<gstr<<endl;
char a;
while(ostr>>a)
{
cout<<a<<endl;
}
}
stringstream类的对象还可以进行string与各种内置类型数据之间的转换。
代码:
#include <iostream>
#include <sstream>
#include <string>
using namespace std;
int main()
{
stringstream sstr;
//--------int转string-----------
int a=100;
string str;
sstr<<a;
sstr>>str;
cout<<str<<endl;
//--------string转char[]--------
sstr.clear();//如果你想通过使用同一stringstream对象实现多种类型的转换,请注意在每一次转换之后都必须调用clear()成员函数。
string name = "colinguan";
char cname[200];
sstr<<name;
sstr>>cname;
cout<<cname;
}