Сцепка строк — построение такой их комбинации, которая представляет единую результирующую строку. Операцией сцепления является знак '+'. Иногда эту операцию называют конкатенацией строк.
Пример 39. Ввести строку ST символов. Построить три строки: SR – содержащую все символы русского алфавита исходной строки в порядке их следования; SL – содержащую латинские символы исходной строки; SP – содержащую все остальные символы. Указать количество символов в каждой из строк.
При решении задач со строками часто пользуются функциями. В рассматриваемой задаче введем пользовательскую функцию UST(X). На вход этой функции подается литера, а на выходе число 1, 2, или 3. Число идентифицирует символ на принадлежность одной из строк латинской, русской или прочих символов соответственно. Поскольку порядок следования символов в выходных строках соответствует исходной строке, то можно организовать арифметический цикл от 1 до N, где N — длина введенной строки текста. На каждом шаге цикла следует классифицировать текущую литеру с помощью функции UST(ST[I]). По результатам анализа оператор CASE направляет вычислительный процесс по одной из трех ветвей, в которых путем сцепки формируются выходные строки SL, SR, SP. Программа завершается выводом на экран каждой строки и ее размера.
PROGRAM PR39;
VAR ST, SL, SR, SP: STRING; I, N: BYTE;
FUNCTION UST(X: GHAR): BYTE; {1 - лат., 2 – рус., 3 - остальные}
CONST AL: SET OF CHAR = ['A'.. "Z", 'a'.. 'z'];
AR: SET OF CHAR = ['A'.. 'Я', 'a'.. 'п' 'p'.. 'я'];
BEGIN
UST := 3;
IF X IN AL THEN UST := 1;
IF X IN AR THEN UST := 2;
END;
BEGIN
WRITELN('Введите строку не более 255 символов');
READLN(ST);
N:= ORD(ST[0]); {Длина исходной строки}
WRITELN('B исходной строке', N:l,' символов');
SR:= ";
SL:= ";
SP:= "; {Инициализация создаваемых строк}
FOR I := 1 ТО N {Просмотр исходной строки}
DO CASE UST(ST[I]) OF
1: SL:= SL + ST[I]; {Формирование латинской строки}
2: SR:= SR + ST[I] {Формирование русской строки}
ELSE SP:= SP + ST[I] {Формирование строки прочих литер}
END; {CASE, FOR}
WRITELN('B латинской строке ', ORD(SL[0]): 1,' символов, текст строки:'); WRITELN(SL);
WRITELN('B русской строке', ORD(SR[0]): 1,' символов, текст строки:'); WRITELN(SR);
WRITELN('B строке прочих литер', ORD(SP[0]): 1,' символов, текст строки:');
WRITELN(SP)
END.
Строки
AL: SET OF CHAR = ['A'.. "Z", 'a'.. 'z'];
AR: SET OF CHAR = ['A'.. 'Я', 'a'.. 'п' 'p'.. 'я'];
описывают AL и AR как (SET OF) множества всех возможных подмножеств элементов исходного множества, включая пустое множество. Например, такое множество, состоящее из трех элементов [A,B,C] включает в себя следующие подмножества: [A,B,C], [A,B], [B,C],[A,C],[A],[B],[C],[]. Соответственно запись 'a'.. 'п' эквивалентна 'а', 'б', 'в', 'г', 'д', 'е', 'ж', 'з', 'и', 'й', 'к', 'л', 'м', 'н', 'о', 'п'.
Проверка IF X IN AL определяет наличие переменной X, в множестве AL.