测试行尾和空白区域

时间:2013-10-06 19:49:38

标签: c++ file-io

我正在通过for循环读取一行中有5个双打的文件并将它们存储到结构的向量中,有时候该行上有少于5个双打。该文件看起来像

111.111 222.222 333.333 444.444 555.555

666.666

777.777(空白)888.888 999.999

struct temp_struct{
    double d1,d2,d3,d4,d5
};
vector<temp_struct> data;
for(int i=0;i<3;i++)
    File>>data.at(i).d1>>data.at(i).d2>>data.at(i).d3>>data.at(i).d4>>data.at(i).d5;

有没有办法测试666.666之后和777.777和888.888之间的空白区域。

因为现在我正在阅读它的方式,在666.666之后它将转到文件的下一行并读取777.777和888.888 999.999以便结构看起来像 data.at(1).d1 = 666.666 data.at(1).d2 = 777.777 data.at(1).d3 = 888.888和data.at(1).d4 = 999.999我宁愿拥有

data.at(1).d1=666.666, break because of end of line 
data.at(2).d1=777.777, data.at(2).d2=0, data.at(3).d3=888.8888

我在VS2010 C ++编程

1 个答案:

答案 0 :(得分:1)

解析基于行的文字的常用方法是将std::getline()std::istringstream结合使用,例如:

for (std::string line; std::getline(in, line); ) {
    std::istringstream lin(line);
    // parse the line using `line`
}

但也有其他方法。例如,可以设置一个流来不考虑换行空格:这样,当遇到换行时尝试读取数字,读取该值的尝试将失败!更改被视为空格的方法是使用自定义版本std::locale安装自定义std::ctype<char>对象。