синтаксический анализ — C ++ принимает каждые 2 целых числа одновременно в виде пар из текстового файла

У меня есть текстовый файл, который представляет собой большой список целых чисел, разделенных запятыми.

Например. «1,2,2,3,3,4,1,3,4,10».
Каждые два целых числа представляют смежность вершин в графе.

Я хочу создать некоторый код C ++, который читает текстовый файл и распознает каждые два целых числа как некую структуру данных (например, логическое значение для соседних значений да / нет).

Кроме того, я буду создавать класс, который раскрашивает этот график, используя эти смежности. Будучи в состоянии заставить код помнить, какой цвет или значение было дано каждой вершине (это еще не так важно, как просто заставить программу анализировать данные из текстового файла), но помощь в этом будет оценена или появится в позже вопрос.

Как бы я сделал это в C ++?

0

Решение

Предполагая, что входной файл представляет собой одну строку, состоящую из списка целых чисел с запятой в качестве разделителя.
Похоже, что основные шаги:

  1. Читайте в строке как строку.
  2. Разберите отдельные числа из строки (используя «,» в качестве разделителя). Так что у каждого числа есть своя отдельная строка.
  3. Преобразуйте эти отдельные строки в целые числа.
  4. После того, как у вас есть вектор целых чисел, будет достаточно просто получить каждую пару и делать все, что вы пожелаете.

Пример:

#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;
}

Если ваш файл содержит более одной строки, вы можете просто расширить это и сделать то же самое для каждой строки в вашем файле.

Надеюсь, это поможет.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]