Как посчитать разделители и перечитать строки из файла istream? - PullRequest
0 голосов
/ 06 ноября 2019

У меня есть конструктор с одним аргументом для базового класса, который принимает std::istream& in в качестве параметра. in предполагается, что это файл с полями, разделенными запятой:

c, Toyota  , n, 157
r, Jaguar  , u, 246, 0.2
c, Honda   , b, 145

Предполагается, что каждое поле извлекается из каждой строки и помещается в собственную переменную, за исключением последнего поля строкиведущий с r, который должен оставаться в std::istream& in для использования в конструкторе производного класса.

Я хочу знать, есть ли способ, которым я могу:

  1. Подсчет количества запятых / разделителей в строке
  2. Вернитесь к началу этой же строки и извлеките правильные поля из строки
  3. Оставьте "значения" последнего полястрок, начинающихся с r, в std::istream&

1 Ответ

0 голосов
/ 06 ноября 2019

Как насчет

class Base {
    std::string first;
    char second;
    int third;
public:
    Base(std::istream& in) { 
        char dummy;
        std::getline(in, first, ",");
        in >> second >> dummy >> third;
    }
};

class Derived : public Base {
    double forth;
public:
    Derived(std::istream& in) : Base(in) {
        char dummy;
        in >> dummy >> forth;
    }
};

std::unique_ptr<Base> read(std::istream& in) {
    std::string which;
    std::getline(in, which, ",");
    if (which == "c") {
        return std::make_unique<Base>(in);
    } else if (which == "r") {
        return std::make_unique<Derived>(in);
    }
}
...