Как сканировать целые числа в квадратную матрицу (2D-массив)?(Размер матрицы неизвестен до компиляции) - PullRequest
0 голосов
/ 29 сентября 2018

РЕДАКТИРОВАТЬ: Я хотел бы удалить этот вопрос, я был в состоянии разобраться.Спасибо!

Мне нужно отсканировать несколько целых чисел в двумерный массив (квадратная матрица).После запуска файла матрица будет введена в эту форму (строка за строкой):

РЕДАКТИРОВАТЬ: Моя самая большая проблема заключается в определении размера массива без потери любой из этих строк ввода.

4 4 1 1
4 4 1 1
3 2 2 3
4 1 1 1

Код должен работать для любой матрицы nxn.Затем я должен быть в состоянии сделать некоторую арифметику с матрицами.

Я уже потратил впустую много часов, пытаясь выяснить это, и это действительно удручает меня тем, что я добился нулевого прогресса.Я думал, что для определения размера матрицы мне нужно отсканировать первую строку, но когда я отсканирую первую строку, я теряю эти целые числа !?Я думаю, что я также должен использовать указатели.

У меня почти нет опыта работы с C, может быть, кто-то с большим опытом может показать мне, как должен выглядеть код, чтобы я мог выучить.

Ответы [ 3 ]

0 голосов
/ 29 сентября 2018

Нулевой символ (\0) используется для обозначения конца строки.Он автоматически добавляется в конце любого имеющегося у вас символа *.Это означает, что вы можете прочитать весь файл, затем разбить каждую строку (\n) и затем собрать их вместе в массив двумерных символов, который вы ищете.

0 голосов
/ 29 сентября 2018

Существует четыре подхода:

  1. кодирует размер матрицы в первой строке файла, большинство упражнений по кодированию делают это для упрощения загрузки данных.Он также имел прецеденты во многих протоколах, таких как HTTP, который явно кодирует размер в заголовке длины.Это проще всего реализовать, если у вас есть контроль над форматом данных

  2. Использовать структуру данных, которую вы можете динамически расширять, например, связанный список или динамически растущий массив (аналогично вектору C ++).Сначала вам нужно будет создать или найти библиотеку, которая реализует эти структуры данных, но затем вы сможете легко справиться с данными переменного размера.

  3. Выполните два прохода для данных, первый этап - выяснить размер массива, который вам нужно выделить, затем fseek () вернет файл в начало и прочитает данные ввторой проход

  4. Вариант предыдущего подхода состоит в том, чтобы считывать данные в структуру данных переменного размера, а затем преобразовывать их в обычный массив (или некоторую другую структуру данных, с которой более удобно работать)

0 голосов
/ 29 сентября 2018

Я рекомендую проверить, как работает malloc, это позволяет динамически распределять память.Хорошее место для начала - это пример wikibooks .

Похоже, вы заполняете матрицу во время чтения файла и не знаете, сколько там данных.Я думаю, что вы могли бы сделать, это использовать связанный список указателей на другие связанные списки, что позволяет вам создать 2D матрицу переменного размера.

Некоторые пример для запуска.

Удачи!

...