正确使用运算符>>在相同输入流上的后续时间

时间:2017-04-15 15:12:07

标签: c++ c++11 input stringstream

我正在编写一些代码,以便从文件中读取一些参数值。

我知道,如果,假设我有一个stringstream对象stream从字符串"10"创建,我可以通过键入来初始化定义为int var1;的数字变量:

stream >> var1;

如果现在我的stringstream对象是从字符串"10;3;4.5;3.2;"创建的,并且我有四个变量声明如下:

int var1;
int var2;
double var3;
double var4;

我能写这样的东西:

stream >> var1;
stream >> var2;
stream >> var3;
stream >> var4;

为了初始化此流中的所有四个变量?或者我唯一的选择是实现一个简单的解析器,一次提取一个值,然后将该值存储到每个值中?

嗯,实际上我试过了它并没有用。 var1被正确初始化,但其他变量都被初始化为0。

你能解释为什么这不起作用吗?提前感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

使用流有点棘手,但同时也很有趣。 要使用stringstreams解析它,只需稍微修改代码以考虑分号。方法如下:

//  stream = "10;3;4.5;3.2;"
stream >> var1;
//  stream = ";3;4.5;3.2;"
//  now if you will input stream >> var2,
//  will extract till the next integer value exists.
//  But here, since character ';' and not an integer, it won't pass any value to var2.
//  To correct it, add this line to take are of the ';' :
char ch;
stream >> ch;
stream >> var2 >> ch;
stream >> var3 >> ch;
stream >> var4;

要理解这一点,您需要更好地了解流如何从输入缓冲区中提取输入。我试着一步一步地解释它。

为了更好地理解这个主题,请参考: http://www.learncpp.com/cpp-tutorial/184-stream-classes-for-strings/