У меня есть алгоритм сортировки слов в алфавитном порядке по значению букв, все это прекрасно работает, пока я не включу å ä ö как они возвращают int значение в диапазоне от -103 в -124 , Из-за этого порядок слов, как это ä å ö a например, когда это должно быть a å ä ö. Так как мне сделать так, чтобы это было правильно å ä ö прошлой?
Редактировать: мне не разрешено использовать необычные функции, поэтому этот код так голый, также используя using namespace std
Мой код:
pali это vector типа строки, которую я использую для хранения слов
Решение
Вообще говоря, нет никакой связи между алфавитным порядком букв в любом данном языке и числовыми кодами, назначенными указанным буквам в любом данном наборе символов. Для сравнения строк в алфавитном порядке данного языка (или, в более общем сличение порядок текущего место действия), C имеет специальную функцию под названием strcoll .
Для того, чтобы использовать его, вы должны настроить свой язык соответственно. К сожалению, названия локалей не являются стандартными в C. Если вы работаете в Windows, связанный пример вряд ли сработает.
Это то, что вы должны использовать в реальном программном обеспечении. Это мало что значит для вас, так как вы не должны использовать необычные библиотечные функции. Вам необходимо реализовать функцию, аналогичную strcoll себя, и это должно работать только для вашего языка.
В языке, где каждый символ занимает свое место в алфавите, эта функция проста: написать функцию, которая берет символ и возвращает свое место в алфавите (например, для ‘a’ вернуть 1 , за ‘b’ вернуть 2, …, для ‘å’ возврат 27, для ‘ä’ return 28 …) Сравните строки в соответствии с числами, возвращенными этой функцией. Это может или не может учитывать регистр букв в зависимости от того, какой именно порядок сортировки вы хотите.
Если вы не хотите писать большой переключатель, вы можете использовать тот факт, что буквы в ASCII уже упорядочены так, как вы хотите, вам нужно только исправить порядок трех дополнительных букв. Таким образом, вы можете написать что-то вроде этого:
Конечно, это означает, что не алфавитный, который идет после Z / z в таблице ASCII будут отсортированы неправильно. Если вы хотите отсортировать их после Ö / ö, вам нужно расширить collation_order соответственно. Попробуйте сделать это, не прибегая к case для каждого отдельного персонажа.
Еще один способ написать collation_order должен использовать коды символов (приведен к unsigned char ) как индексы в массиве из 256 целочисленных элементов.
Также обратите внимание, что старые 8-битные кодировки являются старыми и не должны использоваться для серьезных новых разработок. Для получения дополнительной информации читайте этот .
Другие решения
Поскольку ваши параметры ограничены, и вы также можете ограничить свой ввод для предсказуемого юниверса, я бы предложил вам использовать простую функцию синтаксического анализатора для размещения не-ASCII символов внутри мест, которые, как вы знаете, должны:
Бесплатный онлайн инструмент сортировки строк и списков в алфавитном и обратном порядке. Также сервис поможет отсортировать значения по количеству символов в строке от меньшего к большему и наоборот.
Сохранить ссылку
Отправить коллегам
Описание
Нет необходимости обладать навыками в программировании для написания сложных скриптов или тратить время на попытки разобраться с сортировкой в подручных программах — Excel или Word. Теперь можно использовать в ежедневной работе готовые решения.
Алгоритм поможет моментально отсортировать значения в алфавитном и обратном порядке, выстроить данные по числу знаков в слове или любом символьном значении.
Инструкция
Инструмент прекрасно обрабатывает значения добавленные в столбик и отдельные слова указанные через запятую или пробел.
Скопируйте требуемые для сортировки данные в левое окно, укажите одну из четырех функций и нажмите кнопку Сортировать.
По умолчанию доступен Алфавитный порядок (А — Я / 0 — 9). Выбрав Обратный порядок (Я — А / 9 — 0), алгоритм мгновенно отобразит массив наоборот.
Функции Значения по длине (от меньшего к большему) и Значения по длине (от большего к меньшему) работают по схожему принципу, но сортировка происходит по количеству символов в строке.
Компилирую и запускаю программу, ввожу слова. Но ничего дальше не происходит. Как сделать чтобы работала по условию задачи?
#include
#include
#include
#include
#include