从字符串流中输入值
问题描述:
是否有一个while循环允许我将stringstream的所有值输入到某种数据类型中?例如:从字符串流中输入值
stringstream line;
while(/*there's still stuff in line*/)
{
string thing;
line >> thing;
//do stuff with thing
}
答
是:
std::stringstream line;
std::string thing;
while (line >> thing)
{
// do stuff with thing
}
if (line.fail())
{
// an error occurred; handle it as appropriate
}
流操作(如>>
)返回流;这是什么让你连锁流操作,如:
line >> x >> y >> z
一个流可以用作布尔;如果数据流处于良好状态(也就是说,如果数据可以从中读取),则其评估为true
;否则它评估为false
。这就是为什么我们可以使用流作为循环中的条件。
流有多种原因不会处于良好状态。
其中之一是当你到达流的末尾(由测试line.eof()
指示);显然,如果你想从流中读取所有的数据,这是你期望流完成后的状态。
流不会处于良好状态的另外两个原因是,如果某些内部错误或流上的操作失败(例如,如果尝试提取整数但流中的下一个数据不是代表一个整数)。这两项都通过line.fail()
进行测试。
打我吧,我还在打字! (string thing; line >> thing;){use(thing);'+ 1' – sbi 2010-11-20 21:44:23
' }'如果条件在我们的循环中失败了,line.fail()将是true;你将不得不打破循环,以保持流畅。小心使用好(这就是为什么我认为),因为!stream.fail()与stream.good()不相同。 – 2010-11-20 22:06:33