Расставить буквы в алфавитном порядке c

У меня есть алгоритм сортировки слов в алфавитном порядке по значению букв, все это прекрасно работает, пока я не включу å ä ö как они возвращают int значение в диапазоне от -103 в -124 , Из-за этого порядок слов, как это ä å ö a например, когда это должно быть a å ä ö. Так как мне сделать так, чтобы это было правильно å ä ö прошлой?

Редактировать: мне не разрешено использовать необычные функции, поэтому этот код так голый, также используя using namespace std

Мой код:

pali это vector типа строки, которую я использую для хранения слов

Решение

Вообще говоря, нет никакой связи между алфавитным порядком букв в любом данном языке и числовыми кодами, назначенными указанным буквам в любом данном наборе символов. Для сравнения строк в алфавитном порядке данного языка (или, в более общем сличение порядок текущего место действия), C имеет специальную функцию под названием strcoll .

Для того, чтобы использовать его, вы должны настроить свой язык соответственно. К сожалению, названия локалей не являются стандартными в C. Если вы работаете в Windows, связанный пример вряд ли сработает.

Это то, что вы должны использовать в реальном программном обеспечении. Это мало что значит для вас, так как вы не должны использовать необычные библиотечные функции. Вам необходимо реализовать функцию, аналогичную strcoll себя, и это должно работать только для вашего языка.

В языке, где каждый символ занимает свое место в алфавите, эта функция проста: написать функцию, которая берет символ и возвращает свое место в алфавите (например, для ‘a’ вернуть 1 , за ‘b’ вернуть 2, …, для ‘å’ возврат 27, для ‘ä’ return 28 …) Сравните строки в соответствии с числами, возвращенными этой функцией. Это может или не может учитывать регистр букв в зависимости от того, какой именно порядок сортировки вы хотите.

Читайте также  Принтер canon печатает бледно что делать

Если вы не хотите писать большой переключатель, вы можете использовать тот факт, что буквы в ASCII уже упорядочены так, как вы хотите, вам нужно только исправить порядок трех дополнительных букв. Таким образом, вы можете написать что-то вроде этого:

Конечно, это означает, что не алфавитный, который идет после Z / z в таблице ASCII будут отсортированы неправильно. Если вы хотите отсортировать их после Ö / ö, вам нужно расширить collation_order соответственно. Попробуйте сделать это, не прибегая к case для каждого отдельного персонажа.

Еще один способ написать collation_order должен использовать коды символов (приведен к unsigned char ) как индексы в массиве из 256 целочисленных элементов.

Также обратите внимание, что старые 8-битные кодировки являются старыми и не должны использоваться для серьезных новых разработок. Для получения дополнительной информации читайте этот .

Другие решения

Поскольку ваши параметры ограничены, и вы также можете ограничить свой ввод для предсказуемого юниверса, я бы предложил вам использовать простую функцию синтаксического анализатора для размещения не-ASCII символов внутри мест, которые, как вы знаете, должны:

Бесплатный онлайн инструмент сортировки строк и списков в алфавитном и обратном порядке. Также сервис поможет отсортировать значения по количеству символов в строке от меньшего к большему и наоборот.

Сохранить ссылку

Отправить коллегам

Описание

Нет необходимости обладать навыками в программировании для написания сложных скриптов или тратить время на попытки разобраться с сортировкой в подручных программах — Excel или Word. Теперь можно использовать в ежедневной работе готовые решения.

Алгоритм поможет моментально отсортировать значения в алфавитном и обратном порядке, выстроить данные по числу знаков в слове или любом символьном значении.

Инструкция

Инструмент прекрасно обрабатывает значения добавленные в столбик и отдельные слова указанные через запятую или пробел.

Читайте также  Прошивка gopro hero 3 black edition

Скопируйте требуемые для сортировки данные в левое окно, укажите одну из четырех функций и нажмите кнопку Сортировать.

По умолчанию доступен Алфавитный порядок (А — Я / 0 — 9). Выбрав Обратный порядок (Я — А / 9 — 0), алгоритм мгновенно отобразит массив наоборот.

Функции Значения по длине (от меньшего к большему) и Значения по длине (от большего к меньшему) работают по схожему принципу, но сортировка происходит по количеству символов в строке.

Компилирую и запускаю программу, ввожу слова. Но ничего дальше не происходит. Как сделать чтобы работала по условию задачи?

#include
#include
#include
#include
#include

Ссылка на основную публикацию
Adblock
detector