istringstream类
istringstream本质不是类,是一个宏,或者说是一个流:
typedef basic_istringstream<char> istringstream;
istringstream从basic_istringstream的char专用项而来。这一部分让人看得摸不着头脑的原因是因为大量使用了stream的语法,如果有像我一样的新手的话强烈建议去找C++PrimerPlus去看看里面讲。
援引自笔者一个朋友(大佬)的原话是这样的:
istringstream是一个宏,通过typedef展开到basic_istringstream。
这个basic_istringstream继承自basic_istream并重载了operator>>运算符。
template <class Elem, class Tr = char_traits<Elem>, class Alloc = allocator<Elem>>
class basic_istringstream : public basic_istream<Elem, Tr>
可以看到确实是继承自basic_istream类,且basic_istream类中也确实有基础运算符。这解释了为什么这个对象可以像流一样用。
iostream比较像一个黑箱,里边包装了文件或字符串操作。具体来说,(i/o/)fstream封装了文件操作,(i/o/)stringstream封装了字符串操作,他们一起抽象为(i/o/io)stream。
istringstream类支持>>操作,ostringstream类支持<<操作,stringstream类支持>>和<<操作。
通过这样流对象的构造函数,我们可以写入或写出一些东西。
basic_istringstream(
basic_istringstream&& right);
初始化,并加载right值作为一种流。
案例
#include <iostream>
#include <sstream>
using namespace std;
int main()
{
istringstream is("I am\tlove C++\nand I love C");
string str;
//默认是空格或者回车符或者tab,会输出如下内容:I am love C++ and I love C
while (is >> str) {
cout << str << endl;
}
getchar();
return 0;
}
结果:
I
am
love
C++
and
I
love
C
空格或者\会作为流的分界符,一个一个输出。