#include <iostream>
#include <sstream>
#include <string>
using namespace std;
int main(void)
{
int ival1 = 512, ival2 = 1024;
ostringstream format_message;
format_message << "ival1:" << ival1 << '/n' << "ival2:" << ival2 << '/n';
cout << format_message.str() << endl;
istringstream input_istring(format_message.str());
cout << "input_istring:" << input_istring.str() << endl;
string dump1, dump2;
input_istring >> dump1 >> ival1 >> dump2 >> ival2;
cout << "ival1:" << ival1 << ' ' << "ival2:" << ival2 << '/n';
}
stringstream 对 象的一 个 常 见 用法是,需要在多 种数 据 类 型之 间实现 自 动 格式化 时 使用 该类类 型。 例如, 有一 个数值 型 数 据集合, 要 获 取 它们 的 string 表示形式,或反之。sstream 输 入和 输 出操作可自 动 地把算 术类 型 转 化 为 相 应 的string表示形式,反 过来 也可以。
由以上程序即可先获得ival1和ival2的string表示形式,然后再反过来,由string表示形式获得算术类型表示形式。
以上程序是C++ primer中的一个示例程序,但表现不够直观,因为ival1和ival2的值始终是512和1024,为了更直观地表示程序是如何由string表示形式获得算术表示形式,可以编写以下程序演示:
#include <iostream>
#include <sstream>
#include <string>
using namespace std;
int main(void)
{
int ival1,ival2;
string s = "ival1: 512 ival2: 1024";
istringstream input_istring(s);
cout << "input_istring: " << input_istring.str() << endl;
string dump1, dump2;
input_istring >> dump1 >> ival1 >> dump2 >> ival2;
cout << "ival1:" << ival1 << ' ' << "ival2:" << ival2 << '/n';
}
运行以上程序,输出如下:
input_istring:ival1: 512 ival2: 1024
ival1:512 ival2:1024
程序说明:
1.之所以将s的每段字符使用空格隔开,是因为一般情况下,使用输入操作符读string时,空格符和换行符会被忽略。
2.执行input_istring >> dump1 >> ival1 >> dump2 >> ival2后,dump1值为”ival1”
,dump2值为”ival2”,ival1值为512,ival2值为1024
从该程序即可很容易看出,利用字符串流的确可以将string型数字提取出来并转换为int型。