【发布时间】:2011-10-30 08:40:30
【问题描述】:
我有一堆如下所示的输入文件:
(8,7,15)
(0,0,1) (0,3,2) (0,6,3)
(1,0,4) (1,1,5)
我需要编写一个函数,一次解析这些输入一个数字,所以我需要能够按数字分隔输入,例如:8,然后是 7,然后是 15,然后是 0,另一个是 0,依此类推.
到目前为止,我想到的唯一方法是使用 istream.get(),它返回下一个字符的 ASCII 码,我可以通过将其转换为字符来将其转换回其字符格式。然后我会检查该字符是否为数字(因此忽略括号),但是这样,任何双(或三)位数字一次只能读取一个数字。
实现这一目标的最佳方法是什么?
顺便说一句,我必须使用 istream。这是规范的一部分,我不允许更改
谢谢
【问题讨论】:
-
一次读取一个字符的两位数或三位数有什么问题吗?您所要做的就是将目前读取的数字乘以 10,然后加上下一位数字的值。把它放在一个循环中,你就完成了。
-
谢谢 john,这基本上是手动的方式,我希望在 STL 中的某个地方存在一些可以帮助我做得更好的东西!
-
好吧,您可以使用 istream::unget 将最后读取的字符返回到字符串中。这样你就可以取消第一个数字,然后使用>>。但坦率地说,手动方式是不错的方式。
-
或者,由于您的输入看起来很规则,您可以将标点符号读入虚拟变量。像
in >> lparen >> num1 >> comma1 >> num2 >> comma2 >> num3 >> rparen;这样的东西,其中 lparen 等被声明为 char。但是这样的代码很脆弱,我会手动做。