Сравнение строк по алфавиту

У меня есть список структуры, в которой есть поле string, я хочу два элемента структуры сравнить согласно алфавиту(для сортировки), а если быть точнее, то первым должно быть слово, первая буква которого в алфавите находится раньше, если же они одинаковые, то сравниваем по второй букве и так далее. Подскажите какой функцией я могу воспользоваться.


Ответы (1 шт):

Автор решения: Sergey

Вопрос, на самом деле, совсем не простой. Если Ваши строки содержат только 7-битные символы ASCII, то проще всего воспользоваться стандарной функцией strcmp().

Однако, если в эти строки входят какие-то другие символы, то для сравнения необходимо знать способ кодирования этих "других" симвлов. И здесь всё плохо. Способов кодирования много, таблиц кодировок ещё больше и проблема перестаёт иметь однозначное решение.

Теоретически, по стандарту POSIX, если Вы правильно указали locale, то функция strcmp() должна работать правильно. Однако это остаётся на совести разработчика ОС.

Согласно POSIX, сведения из локали используют функци strcoll(), strxfrm() и некоторые другие.

Функция strcoll() сравнивает строки s1 и s2. Она возвращает целое число, которое может быть меньше, равно или больше ноля, если выяснится, что s1 меньше, равна или больше s2 соответственно. Сравнение производится на основе правил текущей локали, указанной в категории

       LC_COLLATE (см. setlocale(3)).

Ситуация несколько упрощается, если используется кодировка UTF-8. Её не нужно подстраивать под конкретную локаль, она универсальная.

Ну, если Вы пишите для Linux, то можете использовать эту библиотеку для работы с UTF-8:

https://developer.gnome.org/glib/stable/glib-Unicode-Manipulation.html

Там есть всё :-)

→ Ссылка