СТРОКИ
ОПИСАНИЕ СТРОКОВОГО ТИПА
Изучение данных структурированного типа начнем со строкового типа данных (строк). Строка — это последовательность символов кодовой таблицы персонального компьютера. При использовании в выражениях строка заключается в апострофы. Количество символов в строке (длина строки) может динамически изменяться от 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 |