具有scanf c的字母数字排序算法

问题描述 投票:1回答:1

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

但是我的问题是如何制作它,以便在您运行程序时,它要求输入字符串(带有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;
}

我想将数据保存在变量数组中,然后使用此变量进行排序。

c arrays pointers scanf quicksort
1个回答
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;
}
© www.soinside.com 2019 - 2024. All rights reserved.