Сортировка значений из 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;
}
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