Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторная работа 5.doc
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
107.52 Кб
Скачать

Лабораторная работа №5 Обработка строковых данных с использованием типа запись

5.1 Цель работы

Освоение процедур и функций работы со строковыми типами данных и работа с типом запись.

5.2 Определение переменных строкового типа.

Особенности типа string

Строка - это последовательность символов ходовой таблицы персонального компьютера. Доступ к отдельному символу может быть получен путем ссылки на него при помощи индекса. Байт в позиции 0, (доступный лишь при отмене проверки диапазона) хранит число, представляющее длину текущего значения переменной типа STRING.

Применение строковых переменных в качестве селектора в операторе CASE недопустимо.

Формат определения констант строкового типа:

Const <идентификатор>=<значение>; Например,... С1 = 'строка 1';...

Формат определения переменных строкового типа:

{Описание переменной типа String с помощью заданного программистом типа}

Type

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

Vаr

<Идентификатор,...>:<имя типa>;

{Описание переменной типа String без заданного программистом типа}

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

Максимальная длина строки не более 255; значение 255 можно не задавать. Пример описания строк и считывания строки:

Program StrTest;

const

S1=' Пример константы строкового типа';

var

S2: string[10];

Begin

Write(' Введите отроку:');

ReadLn(S2) ;

WriteLn(Sl); {Вывод значения строковой константы}

WriteLn(' Длина введенной строки ',8,' равна ',ord(S2[0])) ;

End.

Запись S[0] дает доступ к нулевому байту, содержащему значение текущей длины строки. Значение нулевого байта не должно превышать 255, нарушение этого правила не вызывает программного прерывания, так как директива компилятора R по умолчанию находится в пассивном состоянии {SR-}. Для обеспечения строгого контроля за диапазоном допустимых значений индекса следует перевести директиву R в активное состояние {SR+}. Активный режим R устанавливается на стадии отладки программ.

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

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

Над строками могут выполняться операции отношения и сцепления (конкатенации):

5.2.1 Операции отношения: <,>, =, <>, >=, <=. Результат операции отношения будет иметь тип BOOLEAN. Строки сравниваются посимвольно слева направо. При обнаружении первого несовпадающего символа принимается решение <больше> или <меньше> в соответствии с таблицей кодов ASCII. Если две сравниваемые строки имеют различную длину, совпадают вплоть до последнего символа более короткой строки, то более короткая строка считается меньшей. Например:

'Pascal'='pascal' -> false

'prim'<'primer' -> true '+'<'-' -> true

5.2.2 Сцепление: +. Использование знака + позволяет разместить строки одну за другой. Например:

'Новый'+' '+'год'='Новый год';

Операция + дает тот же результат, что и функция CONCAT(), присутствующая в языке Turbo Pascal для обеспечения его совместимости с другими версиями (описывается ниже).

5.3 Строковые процедуры и функции. Информация о строковых процедурах и функциях дана в таблице 11.

Таблица 11

Назначение процедуры или функции

Заголовок процедуры или функции

Пример

Удаление N символов строки St начиная с позиции Роs

Delete(St:string, Pos,N:byte )

St:='abcdef'

Delete(St,4.2); {St='abcf'}

Вставка строки Strl в строку Str2, начиная с позиции Роs

Insert(Str1,Stf2:string, Pos:byte)

Str2:='abcdef'; lnsert(Sti2,'*',4);

{Str2='abc*def'}

Преоброзование числового значения величины V (integer или real) и помещение результата в строку St

Str(V:real, St:string)

V:=1500; Str(V:6,St); {St=' 1500'}

Преобразование строки St в величину целочнсленного или вещественного типа и помещение результата в V

Val(St:string,V:real, Code:byte)

St:='1.455'; Val(St,V,Cod); {V=1.455. Cod=0}

Сцепление строк St1, St2,...

Concat(Stl,St2,..,Stn:string) :string

Y:=Concat('AA','BB')

{Y='AABB'}

Выделение из строки St подстроки длиной N символов начиная с позиции Роs

Copy(St:string, Pos,N:byte):strting

St:='abcdef'; Y:=Copy(St,2,3); {Y='bcd'}

Вычисление длины строки St

Length(St:string):byte

St:='abcdef',

Y:=Length(St), {Y=6}

Обнаружение первого появления в строке St2 подстроки St1

Pos(St1,St2:string):byte

St2:='abcdef; Y:=Pos('de',St2) {Y=4}