СТРОКОВЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ




СТРОКИ

ОПИСАНИЕ СТРОКОВОГО ТИПА

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

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

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

Определение строкового типа устанавливает максимальное количество символов, которое может содержать строка.

Формат:

type

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

var

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

Переменную типа string можно задать и без описания типа:

var

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

Пример.

const

Address = 'ул. Переверткина, 25'; {Строковая константа}

Type

Flot = string[125J; {Описание с заданием типа}

Var

Fstr: Flot; {По умолчанию длина строки = 255}

Stl: string;

St2,St3: string[50]; Nazv: string[280]; {Ошибка, длина Nazv превышает 255}

Строка в языке Турбо Паскаль трактуется как цепочка символов. (Для строки из N символов отводится N+1 байт; N байт-для хранения символов строки, а один байт — для значения текущей длины строки.)

К любому символу в строке можно обратиться, указав его номер. В самом начале строки (под нулевым номером) расположен байт, содержащий значение текущей длины строки.

            N+1 N

текущая длина строки

Поэтому для определения объема памяти в байтах, требуемой для размещена строки, к значению ее максимальной длины прибавляется 1. Например, для размещения в памяти переменных Fstr, Stl, St2 требуется соответственно 126, 35 и 51 байт. Рассмотрим структуру размещения строки в памяти на следующем примере, Пусть М — максимальная длина строки, L — текущая длина, А — ячейка памяти. Тогда:

А — содержит величину текущей длины; А+1 — первый символ строки; A+L — последний значащий символ; A+L+1

— незанятые ячейки памяти А+М

СТРОКОВЫЕ ВЫРАЖЕНИЯ

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

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

Выражение Результа

‘A’+”T’+’ ‘+’386’ 'AT 386'

‘Турбо'+'Паскаль’ +’7.0’ Турбо Паскаль 7.0'

Следует учитывать, что в операциях сцепления длина результирующей строи не должна превышать 255.

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

Выражение Результат
'MS-DOS'<'MS-Dos' True
'program’>’PROGRAM' True

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

Выражение Результат

'Принтер '>'Принтер' True

'Inteill’=’Intell' True

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

Пример.

Strl:= 'Группа учащихся';

Str2:= Strl + ' школы-лицея1;

Fio:= 'Бочаров А.А.';

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

Описание А Выражение Значение А
A: string[6] А:= ТРУППА Г; ТРУППА'
A: string[8] А-'ГРУППА Г; ТРУППА 1'
A: string[2] А:='ГРУППА Г; .ГР

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

К отдельным символам строки можно обратиться по номеру (индексу) данного символа в строке. Индекс определяется выражением целочисленного типа, которое записывается в квадратных скобках сразу за идентификатором строковой переменной или константы. Например, выражения Str2[l+2] и Str2[7] обеспечат доступ к третьему('Д') и седьмому) символам последнего значения переменной Str2 в приведенном выше фрагменте.

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

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

СТРОКОВЫЕ ПРОЦЕДУРЫИ ФУНКЦИИ

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

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

Insert (Strl, Str2, Poz) — вставка строки Strl в строку Str2, начиная с позиции Poz. Например: var

SI, S2: string[11];

S1:= ' EC ';

S2:= 'ЭЕМ1841';

Insert(31,82,4)

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

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

Значение IBR Выражение Результат
  Str(IBR:6,St) 1500'
4.8Е+03 Str(IBR:10,St) 4800'
  Str(BR:3,St) '76854'

Val

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

ЗначениеSt Выражение Результат
'1450' Val(St,IBR,Cod) Code=0
'14.2Е+02' Val(St,IBR,Cod) Code=0
'14.2А+02 Val(St,IBR,Cod) Code=5

Copy(St,Poz,N) — выделяет из St подстроку длиной N символов, начиная с позиции Poz. Если Poz > Length(St), то результатом будет пробел; если Poz > 255, возникнет ошибка при выполнении. Функция Length описана ниже. Poz, N — целочисленные выражения.

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

Concat (Strl,Str2,...,StrN) — выполняет сцепление строк Strl, Str2,..,StrN в том порядке, в каком они указаны в списке параметров. Сумма символов всех сцепленных строк не должна превышать 255, например:


Выражение

ConcatOAAVXXVY1) Сопса^'Индекс ','394063')


Результат

'AAXXY' 'Индекс 394063'


Length (St) — вычисляет текущую длину в символах строки St. Результат имеет целочисленный тип, например:

 

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

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

 

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

UpCase (Ch) — преобразует строчную букву в прописную. Параметр и результат имеют литерный тип. Обрабатывает буквы только латинского алфавита, например:

 

Значение Выражение Результат
•d' UpCase(Ch) 'D'
V UpCase(Ch) 'W

 



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2022-11-27 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: