Дан массив строк. Отсортировать его в алфавитном порядке.

Лабораторная работа № 11

ОБРАБОТКА СИМВОЛОВ И СТРОК СРЕДСТВАМИ

ЯЗЫКА Turbo Pascal

Цель:

Получить практические навыки работы с символьной информацией с использованием средств Turbo Pascal.

Общие сведения

ОБРАБОТКА СИМВОЛЬНОЙ ИНФОРМАЦИИ

Строка — это последовательность символов. При использовании в выражениях строка обязательно заключается в апострофы. Количество символов в строке (длина строки) может динамически изменяться от 0 до 255. Определение строкового типа устанавливает максимальное количество символов, которое может содержать строка.

Формат описания:

1-ый способ:

Type

имя типа = string [максимальная длина строки];

Var

идентификатор: имя типа;

2-ой способ:

Var

идентификатор: string [максимальная длина строки];

Длина строки может не указываться, в этом случае принимается максимально возможная длина строки, равная 255 символов.

Пример:

Type

Stroka:string[50];

Var

St:Stroka;

St1:string;

St2:string[25];

Строку можно описать с помощью типизированной константы:

Сonst

St:string=’Сегодня хорошая погода !’;

Строковые выражения

Выражения, в которых операндами служат строковые данные, называются строковыми выражениями. Они состоят из строковых констант, переменных, указателей функций и знаков операций. Над строковыми данными допустимы операция сцепления и операции отношения.

Операция сцепления (+) применяется для сцепления нескольких строк в одну результирующую строку.

Например:

Выражение Результат
'E'+'C'+' 18' +'40' 'EC 1840'

Длина результирующей строки не должна превышать 255.

Операции отношения (=, <>, <, >, >=, <=) проводят сравнение двух строковых операндов и имеют приоритет более низкий, чем операция сцепления, т.е. вначале всегда выполняются все операции сцепления, если они присутствуют, и лишь потом реализуются операции отношения. Сравнение строк производится слева направо до первого несовпадающего символа, и та строка считается больше, в которой первый несовпадающий символ имеет больший номер в стандартной таблице обмена информацией. Результат выполнения операций отношения над строковыми операндами всегда имеет булевский тип и принимает значение True, если выражение истинно, и False, если выражение ложно.

Например:

Выражение Результат
'COSM1'<'COSM2' True

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

Для присваивания строковой переменной результата строкового выражения используется оператор присваивания (:=).

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

Для обработки строковых данных используются стандартные процедуры и функции.

Процедуры

Delete (St, Poz, N) — удаление N символов строки St, начиная с позиции Poz.

Значение St Выражение результат
'абвгде' Delete (Str, 4, 2) 'абве'

Insert (Str1, Str2, Poz) — вставка строки Str1 в строку Str2, начиная с позиции Poz.

Пример:

Var S1, S2, S3 : string[11];

...

S1:=' EC ';

S2:='ЭВМ1841';

S3:=Insert (S1, S2, 4);

В результате выполнения последнего выражения значение строки S3 станет равным 'ЭВМ ЕС 1841'.

Str (I, St) — преобразование числового значения величины I (целого или вещественного типа) и помещение результата в строку St. После I может записываться формат, аналогичный формату вывода. Если в формате указано недостаточное для вывода количество разрядов, поле вывода расширяется автоматически до нужной длины.

Значение I выражение Результат
Str (I:6, St) ' 1500'

4) Val (St, I, Cod) — преобразует значение St в величину целочисленного или вещественного типа и помещает результат в I. Значение St не должно содержать незначащих пробелов в начале и в конце. Cod — целочисленная переменная. Если во время операции преобразования ошибки не обнаружено, значение Cod равно нулю, если ошибка обнаружена (например, литерное значение переводится в цифровое), Cod будет содержать номер позиции первого ошибочного символа, а значение I не определено.

Значение St выражение Результат
'1450' Val (St, I, Cod) 1450 Cod=0

Функции

Copy (St, Poz, N) — выделяет из строки St подстроку длиной N символов, начиная с позиции Poz.

Значение St Выражение Результат
'ABCDEFG' Copy (St, 2, 3) 'BCD'

Concat (Str1, Str2, ..., StrN) — выполняет сцепление строк Str1, Str2, ..., StrN в том порядке, в каком они указаны в списке параметров.

Выражение результат
Concat ('AA', 'XX', 'Y') 'AAXXY'

Length (St) — вычисляет длину в символах строки St.

Значение St Выражение результат
'123456789' Length (St)

Pos (Str1, Str2) — обнаруживает первое появление в строке Str2 подстроки Str1. Результат имеет целочисленный тип и равен номеру той позиции, где находится первый символ подстроки Str1. Если в Str2 подстроки Str1 не найдено, результат равен 0.

Значение Str1 Выражение результат
'abcdef' Pos('de', Str1)
'abcdef' Pos('r', Str1)

Примеры сортировки:

Дан массив строк. Отсортировать его в алфавитном порядке.

program sorta;

type

indata=string[80];

mas=array[1..80] of indata;

var

st:mas;

i,n:integer;

Procedure sortstring(var inm:mas; n:integer);

Procedure insort(L,R:integer;var M:mas);

var

a,b:indata;

i,j:integer;

begin

i:=L;

j:=R;

a:=m[(l+r)div 2];

repeat

while m[i]<a do i:=i+1;

while A<m[j] do j:=j-1;

if i<=j then

begin

b:=m[i]; m[i]:=m[j];

m[j]:=b; i:=i+1; j:=j-1;

end;

until i>j;

if l<j then insort(l,j,m);

if l<r then insort(i,r,m);

end;

begin

insort (1,n,inm);

end;

begin

writeln ('Введите количество строк');

readln (n);

writeln ('Введите строки');

for i:=1 to n do

readln (st[i]);

Writeln ('Исходный массив строк:');

for i:=1 to n do

writeln (st[i]);

sortstring(st,n);

Writeln ('Отсортированный массив строк');

for i:=1 to n do

writeln (st[i]);

end.

Наши рекомендации