可以用这种方式进行字符串流吗?从字符串转换为整数?
可以像这样串流吗? 我正在尝试使用 ifstream 读取并转换它。
string things = "10 11 12 -10";
int i1;
int i2;
int i3;
int i4;
stringstream into;
into << things;
into >> i1;
into >> i2;
into >> i3;
into >> i4;
我希望它是:
i1 = 10
i2 = 11
i3 = 12
i4 = -10
这是正确的吗?
同一个字符串流变量可以多次使用吗?
当我尝试的时候,第一次还可以,但后来的一切都是0。
Is it possible to stringstream like this?
I am trying to read with ifstream and convert it.
string things = "10 11 12 -10";
int i1;
int i2;
int i3;
int i4;
stringstream into;
into << things;
into >> i1;
into >> i2;
into >> i3;
into >> i4;
I expect it to be :
i1 = 10
i2 = 11
i3 = 12
i4 = -10
is that correct?
Can the same stringstream variable be used multiple times?
When I tried, the first time was ok but everything else later on is just 0.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
那绝对应该有效。您甚至可以混合类型,如下所示:
输出:
ideone 上的演示: http://www.ideone.com/eb0dR
That should definitely work. You can even mix types, as shown below:
Output:
Demo at ideone : http://www.ideone.com/eb0dR
有效吗?我会这样做的方式是:
等等。这将产生您发布的输出。
Does it work? The way I would do it is:
and so on. That would produce the output you posted.
您发布的内容以及 Jeremiah Willcock 使用
istringstream
的解决方案都有效。但也可以考虑使用 scanf 函数系列(仅需要几个整数)没有太大区别,但对于更高级的输入,使用 scanf 比使用流操纵器要简洁得多):您的示例在此之后只给出 0 的原因是因为
stringstream
一旦提取-10,缓冲区就为空:您必须在缓冲区中插入更多内容,然后才能提取更多内容。您可以多次使用同一个stringstream
实例,但您要么每次都需要完全使用缓冲区,要么意识到在插入下一个项目到缓冲区之前缓冲区中还有更多内容:另外,
ios
(stringstream
继承自)还定义了!
运算符和对void*
的强制转换,以便您可以方便地检查提取是否失败(技术上检查是否设置了failbit
或badbit
,我相信failbit
是与failbit
一起设置的code>eofbit 当缓冲区不足时):What you posted works, along with Jeremiah Willcock's solution using
istringstream
instead. But consider using the scanf family of functions as well (for just a couple of ints it doesn't make much of a difference, but for more advanced input, using scanf can be much more concise than messing around with stream manipulators):The reason your example just gives 0's after that is because the
stringstream
buffer is empty once you extract the -10: you'll have to insert more into the buffer before you can extract more. You can use the samestringstream
instance multiple times, but you'll either need to fully use the buffer each time, or realize that there's more in the buffer before the next item you insert into the buffer:Also,
ios
(from whichstringstream
inherits) also defines the!
operator and a cast tovoid*
so that you can conveniently check if extraction failed (technically checks iffailbit
orbadbit
is set, and I believefailbit
is the one that gets set along witheofbit
when there's not enough in the buffer):是的,它会起作用。
我要做的唯一区别是:
请注意,线路流就像普通流一样,当您读取超过其末尾时,它将耗尽项目并设置失败状态。
例如,在读取包含 4 个数字的多行时,我喜欢执行以下操作:
Yes it will work.
The only difference I would make is:
Note the linestream is just like a normal stream and it will run out of items and set failure state when you read past its end.
For example I like to do the following when reading multiple lines with 4 numbers:
至于你的第二个问题
同一个字符串流变量可以多次使用吗?,
在重用之前可能需要
clear
和seek
流。例如,以下代码将解决您的第二个问题:
希望这会有所帮助。
As for your second question
Can the same stringstream variable be used multiple times?,
probably
clear
andseek
of stream are needed before reuse.For example, the following code will serve your second question:
Hope this helps.