Сортировка значений из argv



У меня есть потерянные строки в argv, и я хотел бы их отсортировать. Я делаю то же самое с strcmp и strcpy.



Как я могу преобразовать const char** в массив char, который я могу использовать в своей функции сортировки?



void sort(const char** sl, int n) {

char s[n][20], t[20];
int i, j;

for (i = 1; i < n; i++) {
for (j = 1; j < n; j++) {
if (strcmp(s[j - 1], s[j]) > 0) {
strcpy(t, s[j - 1]);
strcpy(s[j - 1], s[j]);
strcpy(s[j], t);
}
}
}

printf("nStrings in order are : ");
for (i = 0; i < n; i++)
printf("n%s", s[i]);

}

int main(int argc, const char** argv)
{
sort(argv+1, argc-1);
printf("Files: %in", argc-1);
return 0;
}
528   1  

1 ответ:

Вы можете достичь того, чего хотите, с помощью функции standart qsort.

Код:

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

int string_cmp(const void *a, const void *b)
{
    const char **ia = (const char **)a;
    const char **ib = (const char **)b;
    return strcmp(*ia, *ib);
}

void print_args(int argc, char** argv) {
    int i = 0;
    for(i = 0; i < argc; ++i) {
        printf("%s\n", argv[i]);
    }
}

int main(int argc, char** argv) {
    printf("original:\n");
    print_args(argc, argv);

    qsort(argv, argc, sizeof(char *), string_cmp);

    printf("sorted:\n");
    print_args(argc, argv);
    return EXIT_SUCCESS;
}

Тест:

$ ./String-Sort 432 123456 bhello ahello ch

Вывод:

original:
./String-Sort
432
123456
bhello
ahello
ch
sorted:
./String-Sort
123456
432
ahello
bhello
ch

Но если вы все еще хотите свою собственную функцию, вам просто нужно инициализировать массив s, как это

for(i = 0; i < n; ++i) {
    strcpy(s[i], sl[i]);
}

Добавьте это перед циклом сортировки. Но вы должны быть уверены, что длина каждой входной строки меньше 20, или вам нужно выделить больше памяти для строк.

Comments

    Ничего не найдено.