1. ostringstream: 可以理解为将输出重定向至 ostringstream 对象(内存区域)
2. istringstream: 可以理解为将输入重定向至 istringstream 对象(内存区域)
3. stringstream: stringstream 的内存区域即可接受输入也可输出


1. ostringstream

多次使用 ostringstream 对象时的注意事项

#include <iostream>
#include <sstream>
#include <string>
using namespace std;

int main ()
{
    ostringstream oss;
    oss << 3.1415926;
    cout  << oss.str() << endl;

    oss << 10000;
    cout << oss.str() << endl;

    // 【1】清空 ostringstream 的方法
    oss.str("");    // 正确的清空方法
    // oss.clear()  // 错误的清空方法
    oss << 20000;
    cout << oss.str() << endl;

    return 0;
}




2. istringstream

多次使用 istringstream 对象时的注意事项

#include <iostream>
#include <sstream>
#include <string>
using namespace std;

int main ()
{
    string stringvalues1 = "125";
    string stringvalues2 = "250";
    istringstream iss;
    string stringtest;

    iss.str(stringvalues1);
    cout << iss.str() << endl;
    iss >> stringtest;
    cout << stringtest << endl;

    iss.clear();
    iss.str(stringvalues2);
    cout << iss.str() << endl;
    iss >> stringtest;	// 【1】 如果不调用 clear(), stringtest 还是 125
    cout << stringtest << endl;

    return 0;
}



3. stringstream

#include <iostream>
#include <sstream>
#include <string>
using namespace std;

int main ()
{
    /*
     * stringstream
     * stringstream 的内存区域即可接受输入也可接受输出
     */
    stringstream ss;
    string  strTmp;
    int     iTmp;
    ss << "ccc 333 ddd 444";
    while(ss >> strTmp >> iTmp)
    {
        cout << strTmp << "-" << iTmp << endl;
    }

    // 【1】 关于 C++ 的 I/O 还有很多没有了解的,下面的结果就很奇怪
    ss.str("");
    ss.clear();
    ss >> strTmp >> iTmp;
    cout << strTmp << "-" << iTmp << endl;  // ddd-444

    return 0;
}