Строки массива отсортированы с использованием qSort в C - PullRequest
1 голос
/ 31 октября 2010

вопрос прост: есть некоторый способ, что упорядоченный массив, который возвращает мне «qsort», возвращается в обратном порядке, то есть я хочу избежать использования любого вспомогательного массива для инвестирования результирующего массива с использованием qsort.

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

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

            int cstring_cmp(const void *a, const void *b)
            {
                const char **ia = (const char **)a;
                const char **ib = (const char **)b;
                return strcasecmp(*ia, *ib);
                /* strcmp functions works exactly as expected from
                comparison function */
            }

Заранее спасибо за ваш ответ, извините за мой английский

            int main (int argc, char *argv [])

            {
            int number;
            char temp [4000];

            printf("input number: ");
            scanf("%d",&number);

            char* array_string [number];
            int i;
            for (i=0;i<number;i++) {
            scanf(" %[^\n]", temp);
            array_string [i] = (char*)malloc((strlen(temp)+1)*sizeof(char));
            strcpy(array_string[i], temp);
            }


            size_t large = sizeof(array_string) / sizeof(char *);
            qsort(array_string,large ,sizeof(char *) ,cstring_cmp );
            printf ("\n");
            printf ("the sorted array list is:\n");
            for (i=0;i<large;i++)
            printf("%s\n", array_string [i]);
                    return 0;
            }

Ответы [ 2 ]

4 голосов
/ 31 октября 2010

Вы только что пытались изменить порядок параметров в strcasecmp?

return strcasecmp(*ib, *ia);

3 голосов
/ 31 октября 2010

Делает ли это то, что вы хотите?

        int cstring_cmp(const void *a, const void *b)
        {
            const char **ia = (const char **)a;
            const char **ib = (const char **)b;
            return -strcasecmp(*ia, *ib);
            /* return the negative of the normal comparison */
        }
...