Listing 1 The header <sstream>

// sstream standard header
#ifndef _SSTREAM_
#define _SSTREAM_
#include <string>
#include <strstream>
      // class stringbuf
class stringbuf : public strstreambuf {
public:
   stringbuf(ios::openmode _W = ios::in | ios::out)
      : strstreambuf(0, 0, 0, _Mode(_W)) {}
   stringbuf(const string& _S,
      ios::openmode_W = ios::in | ios::out)
      : strstreambuf((char*)_S.c_str( ,_S.length(), 0,
         _Mode(_W)) {}
   virtual ~stringbuf();
   string str() const;
   void str(const string& _S);
protected:
   _Strstate _Mode(ios::openmode);
   };
      // class istrstream
class istringstream : public istream {
public:
   istringstream(openmode _W = in)
      : istream(&_Sb), _Sb(_W) {}
   istringstream(const string&_S, openmode _W = in)
      : istream(&_Sb), _Sb(_S, _W) {}
   virtual ~istringstream();
   stringbuf *rdbuf() const
      {return ((stringbuf *)&_Sb); }
   string str() const
      {return (_Sb.str()); }
   void str(const string& _S)
      {_Sb.str(_S); }
private:
   stringbuf _Sb;
   };
      // class ostrstream
class ostringstream: public ostream {
public:
   ostringstream(openmode_W = out)
      : ostream(&_Sb), _Sb(_W) {}
   ostringstream(const string& _S, openmode _W = out)
      : ostream(&_Sb), _Sb(_S, _W) {}
   virtual ~ostringstream();
   stringbuf *rdbuf() const
      {return ((stringbuf *)&_Sb); }
   string str() const
      {return (_Sb.str());)
   void str(const string& _S)
      {_Sb.str(_S); }
private:
   stringbuf _Sb;
   };
#endif /* _SSTREAM_ */