Как передать текстовый файл в 2D-массив в c ++? - PullRequest
0 голосов
/ 28 мая 2020

Мне необходимо передать текстовый файл, содержащий целые числа, разделенные запятыми, в 2D-массив в C ++. например, если текстовый файл выглядит так:

2,3,56,4
3,5,7,1
0,23,9,87
2,4,5,2

Мне нужно поместить это в 2D-массив, чтобы я мог позже выполнять вычисления (которые я знаю, как это делать). У меня есть следующий код, но я очень борюсь. Любая помощь будет оценена. Спасибо.

#include <iostream> 
#include <sstream>
#include <string>
#include <fstream>
using namespace std;
int main()
{

    const int row =4;
    const int col =4;
    int array[row][col];
    int r =0;
    int c =0;

    ifstream inputfile("numbers.txt");
    if (!inputfile.is_open())
    {
        cout<<"error"<<endl;
    }
    string line,num;
    int number;
    while(get line(inputfile,line))
    {
        string stream ss(line);
        getline(ss,num,',');
        number = stoi(num);

        for (int r=0; r<row;r++)
        {
            for (int c=0; c<col; c++)
            {
                array[row][col] =number;
            }
        }


        inputfile.close();
        return 0;
    }

1 Ответ

1 голос
/ 29 мая 2020

Вот простой пример:

static const int MAX_ROWS = 4;
static const int MAX_COLUMNS] = 4;
int matrix[MAX_ROWS][MAX_COLUMNS];
//...
for (int row = 0; row < MAX_ROWS; ++ row)
{
    std::string row_text;
    std::getline(inputfile, row_text);
    std::istringstream row_stream(row_text);
    for (int column = 0; column < MAX_COLUMNS; ++column)
    {
       int number;
       char delimiter;
       row_stream >> number >> delimiter;
       matrix[row][column] = number;
    }
}

Выше предполагается, что текстовый файл содержит точное количество чисел.

Поскольку разделители в конце строки различаются, каждая строка читается как строка, затем используйте std::istringstream, чтобы обрабатывать поток как файл.

...