~~~~我的生活,我的点点滴滴!!
iostream 标准库支持内存中的输入/输出,只要将流与存储在程序内存中的 string 对象捆绑起来即可。此时,可使用 iostream 输入和输出
操作符读写这个 string 对象。标准库定义了三种类型的字符串流:
istringstream,由 istream 派生而来,提供读 string 的功能
ostringstream,由 ostream 派生而来,提供写 string 的功能
stringstream,由 iostream 派生而来,提供读写 string 的功能
使用上述类时,要带上头文件sstream头文件。
1、stringstream
//创建自由的stringstream对象
stringstream strm;
//或者,通过string副本来生成stringstream对象
stringstream strm(s);
//返回strm中存储的string对象
strm.str();
//或者将string类型的s复制给strm,返回void
strm.str(s);
2、istreamstream
我们经常碰到一会以一个单词输入的,一会又以一行输入的,当他们两种情况同时出现在一起的时候,我们应该怎么办了?
答案:
肯定要先以行的形式读取进来,然后在以单词的方式分割,有没有好的分割方法了,当然就
string line, world;
while( getline(cin, line) )
{
istreamstream stream(line);
while( stream >> world )
{
//dosomething
//这样是不是就很方便的把一行字符串以单词的形式分割开了
//不用自己傻傻的去挨个分离了
}
}
3、ostreamstream
ostreamstream最常用的方式就是多种数据类型之间的自动格式化转换,假如有一个数值型集合,里面包含int、flaot、double等等,通通都要转
换成string然后与其他的字符串拼接,最后展现出来,或者反之!这个时候用ostreamstream是在好不过了。
int a = 55;
double b = 60.786;
string str = "";
ostreamstream os;
os << a << "--" << b;
str = os.str();
cout << str << endl;
他最后变成字符串了,和sprintf类似,但是如果按下面这样写,那是不是立马觉得他比sprintf高大上了!!!!!
template <typename T> std::string toStr(const T & t)
{
std::ostreamstream os;
os << t;
return os.str();
}
通过模板,就统一了函数接口,不管传进来的是什么类型,都可以统一转成string在返回。
int a = 55;
double b = 60.789;
std::string str = "hahaha a = ";
str += toStr(a);
str += ", b = ";
str += toStr(b);
上述只是简单的罗列了一下他们的用法,更多更详细的使用还得去看c++官方给的解释与函数接口。。
很多时候,只需要知道上述的用法就满足我们的开发要求了。。