
- •Лабораторная работа №5 Обработка строковых данных с использованием типа запись
- •5.1 Цель работы
- •5.2 Определение переменных строкового типа.
- •5.2 Строковые выражения
- •5.4 Пример программы
- •5.5 Представление типа запись
- •5.6 Задание на лабораторную работу
- •5.7 Варианты заданий
- •5.6 Контрольные вопросы
Лабораторная работа №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} |