У меня есть текстовый файл, который представляет собой большой список целых чисел, разделенных запятыми.
Например. «1,2,2,3,3,4,1,3,4,10».
Каждые два целых числа представляют смежность вершин в графе.
Я хочу создать некоторый код C ++, который читает текстовый файл и распознает каждые два целых числа как некую структуру данных (например, логическое значение для соседних значений да / нет).
Кроме того, я буду создавать класс, который раскрашивает этот график, используя эти смежности. Будучи в состоянии заставить код помнить, какой цвет или значение было дано каждой вершине (это еще не так важно, как просто заставить программу анализировать данные из текстового файла), но помощь в этом будет оценена или появится в позже вопрос.
Как бы я сделал это в C ++?
Предполагая, что входной файл представляет собой одну строку, состоящую из списка целых чисел с запятой в качестве разделителя.
Похоже, что основные шаги:
Пример:
#include <iostream>
#include <fstream>
#include <sstream>
#include <vector>
#include <string>
using namespace std;
int main() {
fstream inFile;
inFile.open("input.txt"); // File with your numbers as input.
string tempString = "";
getline(inFile, tempString); // Read in the line from the file.
// If more than one line per file you can put this whole thing in a loop.
stringstream ss(tempString); // Convert from a string to a string stream.
vector<string> numbers_str = vector<string> (); // string vector to store the numbers as strings
vector<int> numbers = vector<int> (); // int vector to store the numbers once converted to int
while(ss.good()) // While you haven't reached the end.
{
getline(ss, tempString, ','); // Get the first number (as a string) with ',' as the delimiter.
numbers_str.push_back(tempString); // Add the number to the vector.
}
// Iterate through the vector of the string version of the numbers.
// Use stoi() to convert them from string to integers and add then to integer vector.
for(int i=0; i < numbers_str.size(); i++)
{
int tempInt = stoi(numbers_str[i], nullptr, 10); // Convert from string to base 10. C++11 feature: http://www.cplusplus.com/reference/string/stoi/
numbers.push_back(tempInt); // Add to the integer vector.
}
// Print out the numbers ... just to test and make sure that everything looks alright.
for(int i = 0; i < numbers.size(); i++)
{
cout << i+1 << ": " << numbers[i] << endl;
}
/*
Should be pretty straight forward from here.
You can go iterate through the vector and get every pair of integers and set those as the X and Y coor for your
custom data structure.
*/
inFile.close(); // Clean up. Close file.
cout << "The End" << endl;
return 0;
}
Если ваш файл содержит более одной строки, вы можете просто расширить это и сделать то же самое для каждой строки в вашем файле.
Надеюсь, это поможет.
Других решений пока нет …