C сохранение строк в 2d массив - PullRequest
1 голос
/ 06 февраля 2011

Идея заключается в чтении строк из стандартного ввода до достижения EOF (в этом формате "string - string").Затем разбейте строку на две строки и сохраните их в 2d массив.Массив динамически размещается с изначально 2 строками и 20 столбцами, но я хотел бы добавлять 2 дополнительные строки каждый раз, когда я хочу добавить в него следующие строки (функция expandmat()).Вот мой код:

char ** alloc(int rows, int collums) {
   char ** mat;
   int i;
   mat = malloc(sizeof (char *) * rows);
   for (i = 0; i < rows; i++) {
      mat[i] = malloc(sizeof (char) * collums);
   }
   return mat;
}

char ** addtoarray(char ** mat, char * string1, char * string2, int position) {

   sscanf(string1, "%s", mat[positon]);
   sscanf(string2, "%s", mat[positon+1]);
   return mat;
}

char ** getinput(char * longstring, char * string1, char * string2) {

   int position = 0, n = 2, max = 30;
   char ** mat;
   mat = alloc(n, max);
   while (fgets(longstring, max, stdin)) {
        sscanf(longstring, "%s - %s", string1, string2);
        addtoarray(mat, string1, string2, positon);
        n += 2;
        position += 2;
        mat = expandmat(mat, n);
   }

   return mat;
}

Кроме того, если в этом коде есть что-то, что не имеет никакого смысла, подскажите, пожалуйста, как это исправить?

Я знаю, что это похоже натривиальная задача, но она сводит меня с ума.

Спасибо за вашу помощь.

Ответы [ 2 ]

0 голосов
/ 06 февраля 2011

Ух ты ... Третий раз, когда такой вопрос возникает сегодня: -).

Пожалуйста, проверьте, поможет ли мой ответ здесь: Массив структур C

0 голосов
/ 06 февраля 2011

Проверьте функцию realloc C, чтобы изменить размер мата.

expandmat должен перераспределить мат, чтобы вы могли добавить еще две строки (он также должен возвращать матрицу, потому что realloc при необходимости скопирует память в новое место)

...