Чтение матриц Young Tableau из файла, затем вставка нескольких элементов или удаление минимального элемента из таблицы - PullRequest
0 голосов
/ 26 октября 2019

Я пытался прочитать молодые таблицы из файла TXT безрезультатно.

Файл теста, который я создал, выглядит следующим образом

4
1
6 7
2 3 12 14
4 8 16 x
5 9 x x
x x x x

1
13
1 3 5
2 4 7
6 9 14
11 12 x

1
6 7
2 3 12 14
4 8 16 x
5 9 x x
x x x x

1
15
1 3 5
2 4 7
6 9 14
11 12 x

Первое число «4» указывает количество случаев.

Число «1» ниже указывает типдействия, которые будут выполнены в таблице.

Числа ниже - это элементы, которые нужно вставить в молодую таблицу.

Символ 'x' в таблице указывает на отсутствие существующего элемента.

Мой метод состоит в том, чтобы прочитать тип необходимого действия, затем прочитать ключи в векторе и затем прочитать таблицу в двумерном векторе.

Итак, возникает проблема:

#include <iostream>
#include <vector>
#include <fstream>
#include <sstream>

using namespace std;

int main()
{
    vector<vector<int>> tableau;
    ifstream file;
    string line;
    cout << "Hello world!" << endl;
    file.open("input.txt");
    if(file.is_open())
        cout << "success" << endl;
    else
        cout << "fail" << endl;
    int cases;
    file >> cases;
    while(cases>0)
    {
        cases--;
        int mode;
        file >> mode;
        cout << "Mode " << mode << endl;
        if(mode==1){
            vector<int> elements;
            getline(file,line);
            istringstream token(line);
            int key;
            while(token >> key){
                    cout << key << " ";
                    elements.push_back(key);
            }
            cout << "\ntableau\n";
            while(getline(file,line)){
                istringstream token(line);
                int element;
                vector<int> column;
                while(token >> element){
                    column.push_back(element);
                }
                tableau.push_back(column);
            }
                for(vector<int> row:tableau){
                    for(int x: row){
                        cout << x << " ";
                    }
                cout << "\n";
                }
        }
        else if(mode==2)
        {
            while(getline(file,line)){
                istringstream token(line);
                int element;
                vector<int> column;
                while(token >> element){
                    column.push_back(element);
                }
                tableau.push_back(column);
            }
                for(vector<int> row:tableau){
                    for(int x: row){
                        cout << x << " ";
                    }
                cout << "\n";
                }
            cout << "Mode 2\n";
        }
        else
            cout << "Wrong Mode\n";
    }

    return 0;
}

Я пытаюсь читать ключи, которые мне нужно вставить, и таблицу отдельно.

Однако используемые мной методы, кажется, просто читаютВместо этого весь файл, который приводит к действительно странным результатам. Код выведет весь файл четыре раза, и «x» просто исчезнет. Я даже не могу начать реализацию функции вставки и извлечения-минут, так как не могу даже прочитать таблицу правильноЯ неправильно использую istringstream? Или istringstream просто не подходит для такого рода проблем?

...