c++ - 运算符的正确使用 >> 在同一输入流上的后续时间

标签 c++ c++11 input stringstream

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

我知道,假设我有一个从字符串 "10" 创建的 stringstream 对象 stream 我可以初始化一个数字变量定义为 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。

您能解释一下为什么这不起作用吗?预先感谢您的帮助。

最佳答案

使用流有点棘手,但同时也很有趣。 要使用 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/

关于c++ - 运算符的正确使用 >> 在同一输入流上的后续时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43427680/

相关文章:

c++ - std::normal_distribution 的类型取决于模板

c++ - 代码片段的作用

c++ - GCC 4.7.1 具有重载的广义常量表达式问题

c++ - 将 C++ 类转换为 JSON

c++ - 枚举基础类型与普通类型

string - 使用 <h :dataTable><h:inputText> on a List<String> doesn't update model values

c++ - 如何在用户输入 ^X 之前读取输入

c++停止在ctrl-d上要求输入

c++ - std::map<int,bool> 插入结果错误?

c++ - C++ 中 sizeof 的行为