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

Задача

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

Решение

Введенную строку, состоящую из слов, преобразуем в массив слов.

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

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

var 
    str: string;
    arr: array[1..30] of string[20];
    s: string[20];
    alph: string;
    i, j, m: byte;
begin
    writeln('Введите символы алфавита одной строкой');
    readln(alph);
 
    writeln('Вводите слова через пробел: ');
    readln(str);
    s := '';
    j := 0;
    for i:=1 to length(str) do begin // разбиение строки на массив слов
        if str[i] <> ' ' then s := s + str[i]
        else begin
            j := j + 1;
            arr[j] := s;
            s := '';
        end;
        if i = length(str) then begin // запись в массив последнего слова
            j := j + 1;
            arr[j] := s;
        end;
    end;
    m := j; // количество слов в массиве
    for i:=1 to m-1 do
        for j:=1 to m-i do
            if pos(arr[j][1],alph) > pos(arr[j+1][1],alph) then begin
            // если позиция первой буквы очередного слова в алфавите больше,
            // чем позиция первой буквы следующего слова, то ...
                s := arr[j];
                arr[j] := arr[j+1];
                arr[j+1] := s;
            end;
 
    for i:=1 to m do write(arr[i], ' ');
    writeln;
end.

Пример выполнения программы:

Введите символы алфавита одной строкой
qwert
Вводите слова через пробел: 
red when quadro ten ello
quadro when ello red ten

 

Тема

Строки

Уровень

Сложные задачи

Последняя редакция