Меню Закрыть

Как отсортировать массив строк

Содержание

Задача

Отсортировать массив строк по алфавиту. Учитывать только первый символ каждой строки.

Решение

Решение данной задачи мало чем отличается от сортировки чисел, т.к. буквы алфавита в таблице кодов символов следуют друг за другом. Это значит, например, что буква ‘a’ имеет код на единицу меньше, чем ‘b’. При этом в Паскале не обязательно даже получать коды букв, можно непосредственно сравнивать сами буквы.

Для того чтобы получить первую букву строки, являющейся элементом массива, надо учесть, что строка сама по себе является своеобразным массивом. Другими словами, мы имеем дело с двумерным массивом. Чтобы извлечь первый элемент вложенных массивов, надо указать второй индекс равный 1. Например, str[i][1], где i — это текущий элемент массива строк, а 1 — первый символ.

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

Как можно отсортировать массив строк, если есть массив, где по порядку соблюдена сортировка такая, как мне нужна. В моем случае это:

И есть свой массив, который мне нужно отсортировать по списку выше. Как это сделать?

3 ответа 3

Очень схематично. Заведите функцию сравнения двух элементов A и B, которая бы:

  1. искала бы положение A в эталонном массиве (a)
  2. искала бы положение B в эталонном массиве (b)
  3. возвращала бы (a-b), то есть >0 если A "больше" B, 0 если A "равно" B,

я даже не знаю как вот это может отсортироваться

Первая Тв, потом Б, потом Н, потом опять Б.

Первое, что приходит на ум: если данные берутся из БД , то ввести дополнительные поля для сортировки. В любом случае, должен быть признак, по которому сортируется.

Читайте также:  Забыл логин и пароль от гугл аккаунта

Всё ещё ищете ответ? Посмотрите другие вопросы с метками массивы delphi или задайте свой вопрос.

Похожие

Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.

дизайн сайта / логотип © 2019 Stack Exchange Inc; пользовательское содержимое попадает под действие лицензии cc by-sa 4.0 с указанием ссылки на источник. rev 2019.11.15.35459

У меня проблема с домашним заданием, с которой у меня возникла небольшая проблема, меня попросили отсортировать массив строк C в алфавитном порядке, используя C ++, используемый алгоритм сортировки должен быть пузырьковой сортировкой. То, что я сделал до сих пор (воспроизведено ниже), может отсортировать массив, но только на основе первого алфавита. Как мне дополнительно отсортировать строки с одинаковым начальным алфавитом?

Решение

if (sar[b][0] > sar[b+1][0])

if (stricmp(sar[b], sar[b+1]) > 0)

ОБНОВЛЕНИЕ: вместо stricmp , ты можешь использовать strcasecmp

Рекомендуем к прочтению

Добавить комментарий

Ваш адрес email не будет опубликован.