Я пытаюсь использовать qsort
для сортировки строки символов по алфавиту. На данный момент это просто похоже на изменение порядка моей строки.qsort, меняющий порядок строк
printf("unsorted %s\n", string);
qsort(string, strlen(string), sizeof(char), compare);
printf("sorted %s\n", string);
Строка - это строка "ACBD". Второй printf показывает это как «DBCA». Моя функция сравнения:
compare(const void *a1, const void *b1){
const int *a2 = a1;
const int *b2 = b1;
if(*a2 == *b2){
return 0;
}
else{
if(*a2 < *b2){
return -1;
}
else{
return 1;
}
}
}
Я уверен, что я делаю что-то довольно глупо, но любая помощь приветствуется.
Edit: строка объявляется char string[1000]
спасибо! все исправлено сейчас – user2655377
@ user2655377 FYI вам может быть лучше определить функцию сравнения как 'int cmp (const void * a1, const void * b1) {return * (char *) a1 - * (char *) b1; } ' – SheetJS
Рассмотрите возможность разыменования указателей напрямую:' const char c1 = * (const char *) a1, c2 = * (const char *) b1; ', что делает остальную часть кода более простой. Как всегда, сравнение может быть упрощено для 'return (c1 c2; '. –
unwind