У меня есть текстовый файл, который имеет некоторое количество целых чисел в каждой строке. Пример:
1 2 4
3
0 4
2 3
Здесь 1-я строка означает, что 1-й узел подключен к узлам с номерами 1, 2 и 5. Пустая строка означает, что 4-й узел не подключен ни к какому узлу.
Это дает мне ориентированный граф.
Это ТАК вопрос может быть полезным, но предполагается, что каждая строка имеет 2 целых числа, тогда как в этом случае она может иметь любое количество целых чисел от 0 до N-1 (N — это количество узлов).
я просто хочу знать как читать этот текстовый файл. Если бы у меня было два целых числа в строке, я мог бы сделать infile >> a >> b. Как узнать, что «\ n» или конец строки произошел.
я не просить код, который делает ориентированный граф.
Принятый ответ от связанный вопрос уже показано, как читать строку за строкой, что вам нужно сделать для своего кода, а первая часть показывает цикл, как читать все числа из вашей строки (istringstream). Поскольку у вас нет фиксированного количества записей, вы можете сохранить их в std :: vector.
Я не думаю, что это домашнее задание, поскольку актуальной темой являются орграфы.
Поэтому некоторый код. Но вы должны сами обрабатывать ошибки.
#include <string>
#include <iostream>
#include <fstream>
#include <sstream>
#include <vector>
typedef std::vector<int> nl_t;
typedef std::vector<nl_t> nll_t;
int main()
{
std::ifstream is("test.dat");
std::string str;
nll_t nll;
while(std::getline(is,str)) {
std::istringstream ss(str);
nl_t nl;
int i;
while(ss >> i) {
nl.push_back(i);
}
nll.push_back(nl);
}
}
/**
Local Variables:
compile-command: "g++ -g test.cc -o test.exe; ./test.exe"End:
*/
Перейдите по этой ссылке
http://www.c-plusplus.de/forum/p1940874#1940874.
Достаточно прочитать код. Нет необходимости понимать немецкий текст.
В вашем случае вы должны изменить строку 18 основной программы с while( datei >> ws )
в while( datei )
и удалите строки 23 и 24. Потому что в Вашем случае пустая строка — это информация.
Или ваш главный может выглядеть так:
ifstream file("input.txt");
if( !file.is_open() )
{
cerr << ">Error by opening the file\n";
return -2;
}
for( int node1 = 1; file.good(); ++node1 )
{
for( int node2; !is_endl(file) && file >> node2; )
cout << "Node " << node1 << " is connected with " << node2 << endl;
}