使用 scanf c 的字母数字排序算法

An alphanumeric sorting algorithm with scanf c

我创建了一个程序,可以按字母数字顺序对数组中的字符串进行排序。

但我的问题是如何做到这一点,以便当您 运行 程序时,它会询问字符串(使用 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;
}

我想将我的数据保存在变量数组中,然后用这个变量排序。

您可以为此动态分配内存。首先询问用户将输入的字符串数,然后分配该大小的 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;
}