оператор ifstream >> для определения конца строки? - PullRequest
7 голосов
/ 27 июля 2011

У меня неправильный список, в котором данные выглядят так:

[Number] [Number]
[Number] [Number] [Number] 
[Number] [Number] [Number] 
[Number] [Number] [Number] 
[Number] [Number] [Number] 
[...]

Обратите внимание, что в некоторых строках есть 2 числа, в некоторых - 3 числа. В настоящее время мой входной код выглядит так

inputFile >> a >> b >> c;

Тем не менее, я хочу игнорировать строки только с 2 числами, есть ли простой способ обойти это? (желательно без использования строковых манипуляций и преобразований)

Спасибо

Ответы [ 3 ]

13 голосов
/ 27 июля 2011

Используйте getline, а затем анализируйте каждую строку отдельно:

#include <iostream>
#include <sstream>
#include <string>

int main()
{
    std::string   line;
    while(std::getline(std::cin, line))
    {
        std::stringstream linestream(line);
        int a;
        int b;
        int c;
        if (linestream >> a >> b >> c)
        {
            // Three values have been read from the line
        }
    }
}
4 голосов
/ 27 июля 2011

Самое простое решение, которое я могу придумать, - это прочитать файл построчно с std::getline, затем сохранить каждую строку по очереди в std::istringstream, затем выполнить >> a >> b >> c и проверить возвращаемое значение.

2 голосов
/ 27 июля 2011
std::string line;
while(std::getline(inputFile, line))
{
      std::stringstream ss(line);
      if ( ss >> a >> b >> c)
      {
           // line has three numbers. Work with this!
      }
      else
      {
           // line does not have three numbers. Ignore this case!
      }
}
...