Алфавитный алгоритм сортировки c с scanf c - PullRequest
2 голосов
/ 25 марта 2020

Я создал программу, которая сортирует строки в массиве в порядке alphanumeri c.

Но мой вопрос заключается в том, как сделать так, чтобы при запуске программы она запрашивала строки (с a scanf но вопрос в том, как с char const *array?), а затем программа сортирует и создает новый файл, в котором будет сохранен результат.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

FILE *myFile = NULL;
static void consoleWrite(char const **a, size_t b) {
    size_t i;
    for (i = 0; i < b; i++)
        fprintf(myFile, "%s ", a[i]);
    printf("\n");
}

static int string_cmp(void const *i, void const *j) {
    char const *const *pointerI = i;
    char const *const *pointerJ = j;   
    return strcmp(*pointerJ, *pointerI); // comparaison de la chaine de caractère !
}

int main(void) {
    char const *array[] = { 
        "01", "fdf", "gffg", "FRSTM-PFOV1DK", "FRSTM-KEFF2OQHT"
    };

    myFile = fopen("file.ini", "a+");
    long array_size = sizeof array / sizeof *array;

    qsort(array, array_size, sizeof *array, string_cmp);
    consoleWrite(array, array_size);
    printf("Le tri a été effectué ! ");

    return 0;
}

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

1 Ответ

0 голосов
/ 26 марта 2020

Вы можете выделить память динамически для этого. Сначала запрашивая количество строк, которые пользователь введет, затем выделяя массив char* такого размера. Затем читаем в строках, сохраняем в нем буфер, выделяем достаточно памяти для введенной строки и копируем содержимое буфера в нее. Вот так

int main(void) {
  int array_size = 0;
  char **array;
  char buffer[256];

  myFile = fopen("file.ini", "a+");

  scanf("%d", &array_size);
  array = malloc(array_size * sizeof(char*));

  for(int i = 0; i < array_size; i++) {
    scanf("%s", buffer);
    array[i] = malloc(strlen(buffer) + 1);
    strncpy(array[i], buffer, strlen(buffer) + 1);
  }

  qsort(array, array_size, sizeof *array, string_cmp);
  consoleWrite(array, array_size);
  printf("Le tri a été effectué ! ");

  for(int i = 0; i < array_size; i++)
    free(array[i]);
  free(array);

  return 0;
}
...