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;
}