您的位置:首页 > 其它

【STL】ostringstream, istringstream, stringstream

2014-04-08 10:09 537 查看
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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息