从文本文件中读取数据并忽略其他文件

时间:2014-01-31 04:45:26

标签: c++ string parsing getline

对于我项目的一小部分,我应该使用cin从文本文件中提取数据,我的程序将根据命令行参数知道从哪里来cin。我的问题是如何提取四个数据并忽略逗号。例如,.txt文件将如下所示

(1,2,3,.)
(2,1,3,#)
(3,1,0,.)

在这种情况下,我需要提取1,2,3和。为第一行。然后转到第二行。当达到空白换行符时,我可以通过while循环退出getline()场景。

我知道我需要使用getline(),并且我能够通过使用getline()生成的字符串的.at()函数来提取数据。然而,当一个坐标(如1,2或3)可能是两位数时,我感到困惑。当发生这种情况时,我之前的算法不起作用,所以我觉得我在思考这些事情,应该有一种更简单的方法来解析这些数据。

谢谢!

2 个答案:

答案 0 :(得分:0)

您可以使用>>操作员到一个假的' char'要在分隔符中读取的变量。这假设你不关心第四个标记,并且它总是一个字符:

char ch;
while (ss >> ch)
{
    int a,b,c;
    ss >> a >> ch >> b >> ch >> c >> ch >> ch >> ch;
}

答案 1 :(得分:-1)

一种简单的方法是使用sscanf,将您从cin读取的字符串作为第一个参数传递给它

sscanf(s, "(%d,%d,%d,%c)", &a, &b, &c))

如果要从头开始解析字符串,只需聚焦模式。

在这种情况下,模式是

'(', number, ',', number, ',', number, ',', char, ')'

所以你可以找到三个逗号,然后简单地从它们之间提取三个数字。

更复杂的方法是regex。 但是C ++没有本机支持(Boost库可以)