1. sstream
在C++有两种字符串流,一种在sstream中定义,
另一种在strstream中定义。
它们实现的东西基本一样。
strstream里包含
class strstreambuf;
class istrstream;
class ostrstream;
class strstream;
它们是基于C类型字符串char*编写的
sstream中包含
class istringstream;
class ostringstream;
class stringbuf;
class stringstream;
class …….
它们是基于std::string编写的
因此ostrstream::str()返回的是char*类型的字符串
而ostringstream::str()返回的是std::string类型的字符串
在使用的时候要注意到二者的区别,一般情况下推荐使用std::string类型的字符串
当然如果为了保持和C的兼容,使用strstream也是不错的选择。
=====================================================
2. stringstream
使用stringstream对象简化类型转换
C++标准库中的
为什么要学习
如果你已习惯了
int n=10000;
chars[10];
sprintf(s,”%d”,n);// s中的内容为“10000”
到目前为止看起来还不错。但是,对上面代码的一个微小的改变就会使程序崩溃:
int n=10000;
char s[10];
sprintf(s,”%f”,n);// 看!错误的格式化符
在这种情况下,程序员错误地使用了%f格式化符来替代了%d。因此,s在调用完sprintf()后包含了一个不确定的字符串。要是能自动推导出正确的类型,那不是更好吗?
进入stringstream
由于n和s的类型在编译期就确定了,所以编译器拥有足够的信息来判断需要哪些转换。
你的编译器支持
注意,
string到int的转换
string result=”10000”;
int n=0;
stream<
重复利用stringstream对象
如果你打算在多次转换中使用同一个stringstream对象,记住再每次转换前要使用clear()方法;
在多次转换中重复使用同一个stringstream(而不是每次都创建一个新的对象)对象最大的好处在于效率。stringstream对象的构造和析构函数通常是非常耗费CPU时间的。
.clear()是清空标志位
.str() 是清内容
=============================================================
3. istringstream
istringstream是由一个string对象构造而来,istringstream类从一个string对象读取字符。
(a) istringstream istr;
istr.str("1 56.7",);
(b) 上述两个过程可以简单写成 istringstream istr("1 56.7");
4. ostringstream 是向一个string对象输出字符
ostringstream ostr;
a. 获得字符串 .str();
b. 每次不同的使用时刻必须要清空 ss.str(""), iss.str(""), oss.str(""),暂时没有发现其它的清空方法