Встроенные стандартные функции для обработки строк

Length(S:String) : Byte возвращает текущую длину строки S. Результат имеет целочисленный тип.

Пример. Var L:Byte;

. . .

L:=Length(S);

Concat(S1,S2,…,SN:String) : String выполняет слияние строк S1,S2,…,SN в том порядке, в каком они указаны в списке параметров.

Пример. Var Ssum:String[50];

. . .

Ssum:=Concat(S1,S2,S3);

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

Пример. Ssum:=S1+S2+S3;

Copy(S:String; Poz, L:Length) : String;

позволяет выделить из строки S последовательность из L символов, начиная с позиции Poz. Если Poz>Length(S), то функция вернет пустую строку, а если L больше, чем число символов от Poz до конца строки S, то вернется остаток строки S от Poz до конца.

Пример. Var Ssum:String;

. . .

Ssum:=Copy(‘ABC***123’, 4, 3); {Ssum=’***’}

Ssum:=Copy(‘ABC’, 4, 3); {Ssum=’ ‘}

Ssum:=Copy(‘ABC***123’, 4, 11); {Ssum=’***123’]

Pos(S1, S:String) : Byte

возвращает номер символа в строке S, с которого начинается включение в S подстроки S1. Если S не содержит в себе S1, то функция вернет 0. Недостатком функции Poz является то, что она возвращает ближайшую стартовую позицию S1 в S от начала строки, т.е. вызов

Var P:Byte;

. . .

P:=Poz(‘abc’, ’Nom abcabcabcfcd’);

завершит свою работу, вернув значение 5, хотя есть еще и 8, и 11.

UpCase(C:Ch) : Char;

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

 

Pred(C:Char) : Char выдает ЬЮM__п”___предшествующий C символ.

Succ(C:Char) : Char выдает следующий за C символ.

Chr(X:Byte) : Char возвращает символ, код которого равен X.

Ord(C:Char) : Byte возвращает число, равное коду символа C.

 

Учитывая, что текущая длина строки S содержится в S[0], она может быть определена следующим образом:

Var S:String;

L:Byte;

. . .

Read(S);

L:=Ord(S[0]);

Запись― это структура данных, состоящая из фиксированного числа элементов, которые называют полями. В отличие от массива поля могут иметь разные типы. Чтобы можно было ссылаться на тот или иной элемент записи, поля именуются.

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

type имя типа = record

список идентификаторов полей1 : тип полей1;

список идентификаторов полей2 : тип полей2;

. . .

список идентификаторов полейN : тип полейN;

end;

var имя записи : имя типа;

или:

var имя записи : record

список идентификаторов полей1 : тип полей1;

список идентификаторов полей2 : тип полей2;

. . .

список идентификаторов полейN : тип полейN;

end;

Пример записи, объединяющей данные об одном студенте:

type student = record

nom : string[8]; {номер группы}

fio : string[25]; {фамилия,имя,отчество}

year : word; {год рождения}

pasport : string[12]; {серия и номер паспорта}

address : string[30]; {домашний адрес}

end;

var stud, bun : student;

Обращение к элементам записи производится с помощью составного имени. Составное имя имеет следующий вид :

Имя записи . имя поля

Например, для обращения к паспортным данным и адресу студента нужно воспользоваться следующими составными именами:

stud.pasport и stud.adress

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

Пример.

Stud.address := ’г.Минск, ул. Скорины 8, кв. 36.’;

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

Пример.

Bun := stud;

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

type student = record

nom : string[8]; {номер группы}

fio : string[25]; {фамилия, имя, отчество}

year : word; {год рождения}

pasport : string[12]; {серия и номер паспорта}

address : string[30]; {домашний адрес}

end;

var group : array[1..20] of student;

Для обращения, например, к полю fio 10-го элемента этого массива, т.е. к ФИО студента, имеющему 10-й порядковый номер, нужно использовать следующее составное имя:

group[10].fio;

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

With имя записи Do оператор;

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

 

Множества

Еще один структурированный тип данных ― это множество (set). В нем может содержаться не более 256 элементов.

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

 

Описание множеств

В разделе var множества описываются следующим образом:

var <имя_множества>: set of <тип_элементов_множества>;

Элементы могут принадлежать к любому порядковому типу, размер которого не превышает 1 байт (256 элементов). Например:

var s1: set of char; {множество из 256-ти элементов}

s2: set of 'a'..'z','A'..'Z'; {множество из 52-х элементов}

s3: set of 0..10; {множество из 11-ти элементов}

s4: set of boolean; {множество из 2-х элементов}


Множество-константа

Наименованная константа

Множество можно задать неименованной константой прямо в тексте программы. Для этого необходимо заключить список элементов создаваемого множества в квадратные скобки:

[<список_элементов>]

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

Примеры конструирования и использования различных множеств:

if c in ['a','e','i','o','u']

then writeln('Гласная буква');

if set1 < [k*2+1..n,13] then set1:=[];