Как считать несколько строк с разным разделением цифр из файла в отдельные вектора?

Я только начал практиковаться на сложных заданиях и еще сталкиваюсь с проблемами в создании сложных систем. Так ,что не судите строго)

ЗАДАЧА:

1- Считать с txt файла несколько (см. пример) строк и преобразовать их в (соответственно 3) отдельные vector;

2- Учесть разную "пунктуацию" (см. пример);

НЕ могу корректно записать логику перевода в vector через функцию. Выложенная версия кода читает весь первый массив и по одному первому зна-ю следующих.

Пример txt

В одном файле 3 строки.

1 2 3 4 5 6 7 8 9 10

11,12,13,14,15,16,17

21, 22, 23, 24, 25

  • разная длинна
  • числа целочисленные и могут быть рандомные (пример выбрал простой)
  • виды разделения чисел: ПРОПУСК, КОМА, КОМА+ПРОПУСК

КОД

#include<iostream>
#include<vector>
#include<string>
#include<fstream>
#include<algorithm>
#include<sstream>

std::vector<int>Read_Func(const std::string file_name, const char symbol) {

  std::string str;
  std::vector<int>vec_int_tmp;
  std::ifstream in_file(file_name, std::ios::in | std::ios::binary);

  while (!in_file.eof()) {
    getline(in_file, str, '\r');
    std::stringstream iss(str);
    if (symbol==' ') {
      int num;
      while (iss >> num) 
        vec_int_tmp.push_back(num);
    }
    if (symbol==',') {
      std: :replace(str.begin(), str.end(), ',', ' ');
      int num;
      while (iss >> num) 
        vec_int_tmp.push_back(num);
    }
    if (symbol==', ') {
      std: :replace(str.begin(), str.end(), ',', ' ');
      int num;
      while (iss >> num) 
        vec_int_tmp.push_back(num);
    }
    count++;
  }
  
  //Print Messages (Error and others)

  in_file.close();
  return vec_int_tmp;
}

int main() {
  std::string file_name {"C:/.../Given_array.txt"};
  
  std::vector<int>vec_space;
  std::vector<int>vec_both;
  std::vector<int>vec_coma;
  
  vec_space=Read_Func(file_name, ' ');
  vec_coma=Read_Func(file_name, ',');
  vec_both=Read_Func(file_name, ', ');
}

>>> UPDATE <<<

Итоговый код выглядит следующим образом. Отдельное спасибо Harry.

std::vector<std::vector<int>> readFile(std::istream& in)
{
    std::vector<std::vector<int>> v;
    std::string buf;
    while (getline(in, buf))
    {
        replace(buf.begin(), buf.end(), ',', ' ');
        std::istringstream is(buf);
        std::vector<int> b;
        copy(std::istream_iterator<int>(is), std::istream_iterator<int>(),
            back_inserter(b));
        v.push_back(b);
    }
    return v;
}

int main() {
    std::string file_name{ "C:/.../Given_array.txt" };
    std::ifstream in_file;
    in_file.open(file_name, std::ios_base::in);
    std::vector<std::vector<int>> vec_int;
    vec_int = readFile(in_file);
  }


Ответы (1 шт):

Автор решения: Harry

Как-то так - в виде вектора векторов:

vector<vector<int>> readFile(istream& in)
{
    vector<vector<int>> v;
    string buf;
    while(getline(in,buf))
    {
        replace(buf.begin(),buf.end(),',',' ');  // Заменяем запятые пробелами
        istringstream is(buf);
        vector<int> b;
        // Читаем новый вектор
        copy(istream_iterator<int>(is),istream_iterator<int>(),
             back_inserter(b));
        // вставляем в коллекцию
        v.push_back(b);
    }
    return v;
}
→ Ссылка