- •Тема 2.2. Основные понятия языка программирования высокого уровня Free Pascal
- •Системы программирования
- •Интегрированная среда разработки FreePascal
- •Введение в язык Паскаль Характеристика языка программирования Паскаль
- •Основные понятия технологии программирования
- •Алфавит языка Паскаль
- •Структура программы на Паскале
- •Типы данных
- •Стандартные типы данных
- •Структуры данных
- •Строковый тип
- •Структурированные переменные
- •Представление основных структур программирования на языке Паскаль Операции и выражения
- •Арифметические операции и выражения
- •Логические операции
- •Оператор присваивания
- •Составной оператор
- •Условный оператор
- •Процедура write
- •Процедура ввода
- •Оператор выбора
- •Операторы повторений
- •Оператор цикла с предусловием
- •Оператор цикла с постусловием
- •Оператор цикла с параметром
- •Метки и операторы перехода
- •Работа с массивами
- •Операции над строками
- •Функция Length
- •Функция Upcase
- •Функция Сopy
- •Функция Pos
- •Процедуры Insert и Delete
- •Процедура Str
- •Процедура val
- •Практические примеры работы со строковыми данными
- •Оператор присоединения with
- •Процедуры и функции Паскаля
- •Формальные и фактические параметры
- •Типизированные константы
- •Interface
- •Implementation
- •Interface
- •Interface
- •Implementation
- •Файловый тип данных Типизированные файлы
- •Текстовые файлы
Операции над строками
Строка в Паскале является разновидностью одномерного массива символов array[0..N]ofcharи предназначена для обработки текстов. По сравнению с массивом символов строка имеет ряд особенностей. Во первых, фактическое количество символов в строке хранится в ее нулевом байте и может меняться от 0 до максимально возможногоN(N<=255). Во вторых, строка может обрабатываться целиком как единый объект.
Описание переменной-строки имеет вид:
<имя> : string [<максимальная длина>];
Параметр <максимальная длина> может быть только константой, не превышающей 255. Допускается не указывать максимальную длину, опуская и квадратные скобки. В этом случае строка будет иметь максимально возможную длину, равную 255 символам. Примеры описаний переменных-строк:
var s:string [80];
st1,st2:string;
Строка в Паскале трактуется как цепочка символов. К любому символу в строке можно обратиться точно так же, как к элементу одномерного массива array [0..N]of char, например:
s[1]:=’A’;
if s[5]=’D’ then . . .
Самый первый байт в строке имеет индекс 0 и содержит текущую длину строки. Первый значащий символ строки занимает второй байт и имеет индекс 1. Например, строка символов ‘ABCD’ размещается следующим образом:
-
0
1
2
3
4
4
A
B
C
D
Основные отличия строки от одномерного массива символов состоят в следующем:
можно присваивать другу строки различной длины, а также переменной-строке – символ; если справа символов окажется больше, чем максимальная длина строки слева, лишние символы будут отброшены;
над строками определена дополнительная операция сцепления «+»; если длина сцепленной строки превысит максимально допустимую, лишние символы будут отброшены;
над строками определены операции отношения =, <>, < , <=, >, >=, которые выполняются посимвольно, слева направо с учетом внутренней кодировки символов (если одна строка меньше другой по длине, недостающие символы короткой строки заменяются значением chr(0) );
строки можно вводить и выводить целиком операторами readlnиwriteln;
для обработки строк определены дополнительные процедуры и функции.
Присваивание последовательности символов строковым переменным осуществляется с помощью оператора присваивания.С правой стороны оператора присваивания может находиться произвольное строковое выражение, а с левой имя строковой переменной.
В Паскале существуют два пути обработки переменных типаstring. Первый путь предполагает обработку всей строки как единого целого, то есть единого объекта. Второй путь рассматривает строку как составной объект, состоящий из отдельных символов, то есть элементов типа char, которые при обработке доступны каждый в отдельности. Так, первый путь предоставляет возможность присвоения строковой переменной за одну операцию значения целой строки символов:
str_1 := ‘Это строка!’.
Присваиваемое значение строки, так же как и отдельный символ типа char, заключается в апострофы. Если апострофы опущены, то компилятор рассматривает приведенный фрагмент текста как числовую величину или как идентификатор.
Второй подход обеспечивает доступ к отдельным символам строки по номеру их позиции:
str_1 [1] := ‘Э’; str_1 [2] := ‘т’; str_1 [3] := ‘o’; str_1 [4] :=’ ‘;
str_1 [5] := ‘c’; str_1 [6] := ‘т’; str_1 [7] := ‘p’; str_1 [7] := ‘o’;
str_1 [8] := ‘к’; str_1 [9] := ‘a’; str_1 [10] := ‘!’
Переменная str_1 приобретает то же самое значение, что и при первом подходе. Для доступа к отдельному символу в строке необходимо указать имя строки и в квадратных скобках номер позиции элемента (символа) в строке. При этом по отношению к отдельному символу строки возможны все те же операции, что и к переменной типа char. Необходимо напомнить, что, кроме классической записи символьной переменной в одинарных кавычках, Паскаль вводит еще две формы. Одна из них – представление символа его кодом ASCII с помощью специального префикса #, вторая, для управляющих символов, – значок ^ и буква алфавита с тем же номером. При необходимости включения в строку управляющих кодов можно пользоваться “клавиатурными” обозначениями. В этом случае значение состоит как бы из склеенных кусков:
^G’После сигнала нажмите ‘^J’ клавишу пробела ‘
В такой записи не должно быть пробелов вне кавычек.
Если длина строки справа больше максимального размера переменной, то присваивание происходит слева направо, а избыточные символы опускаются.
Пример.
type
name = string [7]
var
fname, lname : name;
begin
fname := ‘Наталья’; lname := ‘Сергеева’;
write (fname,’ ‘,lname)
end.
В результате выполнения программы будет выведено: Наталья Сергеев, так как максимальная длина строки 7.
Согласно описанию
var a: string [5]; b: string [10];
можно присвоить значение b := a, хотя типы переменных различны. При присвоении a := b, в “а” запишутся только первые 5 символов строки “b”.
Объединение двух строк в одну может быть осуществлено с помощью оператора конкатенации. Этот оператор записывается с помощью знака + (плюс). Объединенная строка представляет собой строку, состоящую из всех символов первой строки и следующих за ними всех символов второй строки. Например:
Выражение Результат
‘adam’ + ‘eva’ ‘adameva’
‘5’ + ‘.’ + ‘4’ ‘5.4’
‘Это’ + ‘ ‘ + ‘строка’ + ‘!’ ‘Это строка!’
Произвольные пары строк могут сравниваться с помощьюоператоров отношений.Две строки сравниваются посимвольно слева направо. При обнаружении первого несовпадающего символа принимается решение в соответствии с таблицей кодов ASCII. Отношение ‘balkon’ > ‘balken’ дает результат true, так как символ ‘о’ стоит в таблице кодов после символа ‘e’. Отношение ‘Pascal’ = ‘pascal’ дает результат false, так как у прописной буквы код больше, чем у заглавной. Символ ‘+’ стоит в таблице кодов перед символом ‘–’, поэтому сравнение ‘+’ < ‘–’ дает в результате true.
Если две сравниваемые строки имеют различную длину, но совпадают вплоть до последнего символа более короткой строки, последняя строка считается меньшей. Две строки считаются совпадающими только тогда, когда они имеют одинаковую длину и все их символы совпадают.
Паскаль представляет в распоряжение пользователя целый ряд функций и процедур, предназначенных для обработки строк.
