Как мне прочитать размеры матрицы в текстовом файле, C - PullRequest
0 голосов
/ 27 января 2019

У меня есть матрицы в текстовом файле в формате:

1 2 4
2 5 6
7 8 9

5 6 7 8
6 7 8 9
7 8 9 0

Это всего лишь две произвольные матрицы, и они разделены пустой строкой.Я знаю, как читать из текстового файла в многомерные массивы в C, но я немного запутался, как получить количество строк и столбцов для матриц в заданном формате.Они могут быть разной длины каждый раз.Как я могу определить количество строк и столбцов?

Ответы [ 2 ]

0 голосов
/ 27 января 2019

Это может быть не слишком элегантное решение, но оно решает проблему.

Реализуйте свою собственную специальную функцию, которая считывает символы с экрана.Как только он заметит конец строки, \n, интерпретируйте это как строку.Примерно так:

int readInteger(char *endCharacter) {
  char input;
  int integer;
  integer = 0;
  input = getchar();
  while (input != ' ' && input != '\n') {
    integer += (int)input - '0';
    integer *= 10;
    input = getchar();
  }
  *endCharacter = input;
  return integer;
}

int *integerRowFromInput() {
  int *row;
  int size;
  char endCharacter;
  row = malloc(sizeof(int));
  row[0] = readInteger(&endCharacter);
  size = 1;
  while (endCharacter != '\n') {
    size++;
    row = realloc(size * sizeof(int));
    row[size - 1] = readInteger(&endCharacter);
  }
  return row;
}

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

0 голосов
/ 27 января 2019

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...