Сортировка строк в C++, т.е. упорядочивание строк по возрастанию или убыванию, аналогично сортировке любого другого массива и может выполняться с помощью различных функций. Остановимся на встроенной функции qsort. Впрочем, можно реализовать и многие другие функции сортировки строк.
Эта функция библиотеки stdlib.h выглядит так:
1 |
qsort (<сортируемый массив>, <количество элементов>, sizeof(<тип элемента>), <функция для сравнения>); |
В качестве функции для сравнения строк берется готовая функция сравнения строк в лексикографическом порядке из библиотеки stdlib.h:
1 |
strcmp (<строка 1>, <строка 2>); |
Эта функция выдаёт:
- значение меньшее нуля, если <строка 1> меньше чем <строка 2>
- 0, если <строка 1> и <строка 2> равны
- значение большее нуля, если <строка 1> больше чем <строка 2>
В качестве параметра qsort выступает примерно такая функция:
1 2 3 4 5 |
//функция для сортировки строк по возрастанию int comp1 (const void * a, const void * b) { return strcmp(*(char**)a,*(char**)b); } |
Полный пример использования qsort для сортировки строк выглядит так:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
#include <stdlib.h> // подключаем qsort #include <string.h> // подключаем библиотеку обработки строк #include <iostream> // подключаем cout //функция для сортировки строк по возрастанию int comp1 (const void * a, const void * b) { return strcmp(*(char**)a,*(char**)b); } //функция для сортировки строк по убыванию int comp2 (const void * a, const void * b) { return -strcmp(*(char**)a,*(char**)b); } using namespace std; // чтобы не подключать std int main () { char *sort_char_array[] = { "about", "this", "and", "url", "that", "the", "i", "hi" }; int i;//счётчик //сортировка по возрастанию qsort (sort_char_array, 8, sizeof(char**), comp1); //about and hi i that the this url //ввывод результатов на экран for(i=0; i<8; i++) cout<<sort_char_array[i]<<" "; cout<<"\n"; //сортировка по убыванию qsort (sort_char_array, 8, sizeof(char**), comp2);//url this the that i hi and about //ввывод результатов на экран for(i=0; i<8; i++) cout<<sort_char_array[i]<<" "; cout<<"\n"; system("pause"); } |