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

248
20 декабря 2016, 22:16

Дан текстовый файл:

1:1:6
2:0
3:2:1:4
4:0
5:2:2:3
6:0

как правильно считать его в двумерный вектор интов

задан список смежности графа, 1 столбец - вершины графа, 2 - количество его смежных вершин, 3 - смежные вершины я пытался считать через два цикла for,считывал в char и проверял на двоеточие. Если двоеточие, переходил на следующий шаг цикла, иначе записывал в вектор g[i].push_back(char - '0').Проблема в том, что у меня не получилось записывать строки таких размеров, как в примере.

Answer 1

Для начала вам нужна функция, которая считывает строку и превращает её в вектор интов:

#include <iostream>
#include <vector>
#include <sstream>
#include <string>
std::vector<int> read(std::istream &is){
    std::vector<int> data;
    std::string line;
    getline(is, line);
    std::stringstream sstream(line);
    while(sstream){
        int i;
        sstream >> i;
        sstream.ignore(1);
        data.push_back(i);
    }
    return data;
}

Я для того, чтобы разбить строку на числа, использовал std::stringstream. К сожалению у std::string до сих пор нет метода split. Вы можете воспользоваться любым удобным для вас способом.
Теперь нужно просто вызывать полученную функцию до конца файла:

int main()
{
    std::vector<std::vector<int> > data;
    //Вот тут вместо cin  нужно сделать открытие файла.
    //Что-то вроде std::ifstream stream("Имя_Файла");
    std::istream &stream = std::cin; 
    while(stream){
        data.push_back(read(std::cin));
    }
}
READ ALSO
Не добавляет экземляр в конец линейного списка

Не добавляет экземляр в конец линейного списка

Не добавляет нового студента в конец списка

290
Междустрочный интервал Qt

Междустрочный интервал Qt

Нужно увеличить высоту строк в многострочном тексте QLabelНо, не нашел решения с QFont и QStyleSheets

523
Помощь в анимации на Jquery

Помощь в анимации на Jquery

Пишу курсовую работуНужно зделать виртуальную лабораторную работу на тему "Електромагнитная индукция"

227