Написание большинства программ не обходится без строковых данных. Строковые данные используются при организации диалога для ввода исходных значений переменных, задания условий выполнения вычислительных процессов, а также при оформлении результатов расчетов и выводе их на экран дисплея или на устройство печати. Строки представляют собой последовательность символов (литер) и задаются в программе в виде констант или переменных. Константы могут быть явно определены в разделе CONST или неявно в операторах присваивания, в выражениях или списках вывода на внешние устройства.
С использованием текстовых строк в качестве констант мы уже встречались практически в каждой из описанных выше задач. Приведем для сравнения два способа определения строки символов.
• Явное определение текстовой константы:
CONST А = 'Введите значения X, Y';
VAR X, Y: REAL;
BEGIN WRITELN(A);
READLN(X, Y);
• Неявное определение текстовой константы:
VAR X, Y: REAL;
BEGIN WRITELN('Введите значения X, Y');
READLN(X, Y);
При программировании можно использовать оба способа. Во всех случаях строка символов (текстовая константа) заключается в апострофы.
Строка символов в Паскале может иметь фиксированную и переменную длину. Для работы со строкой фиксированной длины используют одномерный массив вида В = ARRAY[0..M] OF CHAR. Размерность массива М определяется количеством символов в строке и не превышает 65535 символов.
Для работы с короткими строками переменной длины, не превышающей 255 символов, следует пользоваться специальным типом данных А = STRING[N], где N — максимальное количество символов в строке. Длина такой строки динамически меняется от 0 до N. Но N не должно превышать 255 символов. При явном объявлении константы А = 'Введите значения X, Y' она приобретает тип ARRAY[1 .. 21] OF CHAR.
Примеры текстовых констант:
CONST BG01 = "; { Пустая строка, N = 0 }
С = 'Я учусь программировать'; { Строка текста, N = 23 }
Поскольку массивы литер являются обычными массивами, они обладают всеми свойствами регулярных массивов. Можно получить копию всего массива (строки) с помощью оператора присваивания, а можно извлечь значение одной литеры с помощью индекса массива.
Пример 37. Текст 'Я учусь программировать' вывести на экран дисплея в обратном порядке.
PROGRAM PR37;
CONST
А = 'Я учусь программировать'; {Текстовая константа А }
VAR
В: ARRAY[1..LENGTH(A)] OF CHAR; {Переменная: массив символов В}
I: INTEGER;
BEGIN
В:= А; { Копирование текстовой константы А в массив В }
FOR I:= LENGTH(A) DOWNTO 1
DO WRITE(B[I]); { Вывод литеры с номером I на экран }
END.
Строки одного и того же типа (одной длины) могут фигурировать в логических выражениях, причем помимо операций отношений =, <> можно использовать также <, >, <=, >=. Сравнение строк производится путем последовательного сравнения литер слева направо, до первого несовпадения. Порядок символов определяется по таблице кодов ASCII.
Например, логическое выражение 'CONTEST' < 'CONTEXT' принимает значение TRUE, поскольку литера 'S' лексикографически меньше 'X', то есть ORD('S') <ORD('X').
Для совместимости с библиотеками WINDOWS и другими языками программирования введены длинные строки ASCII (длиной до 65535 байтов). Этим строкам дан стандартный тип PCHAR.