До сих пор все программы, которые мы писали на Паскале были связаны с обработкой числовой информации. Настала пора освоить принципы работы с символьными и строковыми данными...
Для начала немного теории:
Символьная переменная имеет тип
Char. Символьная константа – символ в апострофах.
Каждому символу соответствует свой уникальный код (кодировочная таблица ASCII - см. рисунок) – целое число от 0 до 255. Символы упорядочены в соответствии с кодами:
-
’A’<’B’<’C’< …
-
’0’<’1’<’2’< …
-
’a’<’b’<’c’< …
-
’Z’<’a’ (коды прописных латинских букв меньше кодов строчных)
С символами связаны 2 функции:
1.
CHR(N) – символ, код которого равен N (N – число от 0 до 255)
2.
ORD(C) – код символа, являющегося значением переменной C (C – символьная переменная)
Строка – упорядоченная последовательность символов. Количество символов в строке называется ее длиной. Длина строки может лежать в диапазоне от 0 до 255.
Строковая переменная имеет тип String. При описании строковой переменной можно указать максимальную длину строки:
Var s:string[20]; a:string[5]; b:string;
Если длина не указана, подразумевается, что она равна максимальной величине – 255.
Строковая константа – последовательность символов, заключенных в апострофы. Два следующих друг за другом апострофа (’’) обозначают пустую строку (строку с длиной 0).
К каждому символу в строке можно обращаться по отдельности. Имя элемента строки состоит из имени строки с индексом, заключенным в квадратные скобки. Индекс – выражение целого типа с положительным значением.
Например, S[2] – второй символ строки S; N[i] – i-й символ строки N; K[n+1] – символ строки K с номером n+1.
Первый символ строки имеет номер 1. Значение индекса не должно превышать максимальное количество символов в строке.
Операции над строками
1. Сравнение строк
Строки можно сравнивать, используя знаки сравнения =, <, >, <=, >=, <>. Строки сравниваются посимвольно слева направо до первого несовпадающего символа. Большей считается та строка, в которой первый несовпадающий символ имеет больший код. Если строки имеют разную длину, но в общей части символы совпадают, то большей считается более длинная строка. Строки равны только в том случае, если они имеют одинаковую длину и все символы совпадают.
Например,
- ’abcd’< ’am’, т.к. ’b’<’m’
- ’abcd’>’ab’, т.к. первые символы совпадают, а строка ’abcd’ длиннее
- ’abcd’=’abcd’, т.к. строки совпадают посимвольно,
но строки ’abcd’ и ’a bcd’ не равны, т. к. одна из них содержит пробел, а другая нет
2. Сцепление (конкатенация) строк
Обозначается знаком «+». Применяется для соединения нескольких строк в одну.
Например, в результате сцепления ’мама ’+’мыла ’+’раму’ получится строка ’мама мыла раму’
Сцепление строк выполняется и с помощью функции Concat.
Concat(S1, S2, …, Sn) выполняет сцепление строк S1, S2, …, Sn в одну строку.
3. Определение длины строки
Length(S) – текущая длина строки S. Результатом является целое число.
Например,
- значение Length(’abcd’) равно 4
- значение Length(’мама ’+’мыла ’+’раму’) равно 14
- значение Length(’’) равно 0
4. Поиск подстроки в строке
Pos(S1,S2) – первое появление строки S1 в строке S2. Результатом является целое число, равное номеру позиции, где находится первый символ подстроки S1. Если строка S1 не входит в строку S2, то результатом будет 0.
Например,
- значение Pos(’bc’, ’abcd’) равно 2
- значением Pos(’bc’, ’bcbc’) равно 1
- значением Pos(’bc’, ’acbd’) равно 0
5. Выделение подстроки из строки
Copy(S,P,L) – подстрока строки S, начинающаяся с символа с номером P и с количеством символов L. Результатом является подстрока, при этом сама строка S не изменяется.
Например,
- значением Copy(’холодильник’,1,5) будет строка ’холод’
- значением Copy(’холодильник’,6,2) будет строка ’ил’
6. Удаление символов из строки
Delete(S,P,N) – удаление из строки S N символов, начиная с символа с номером P. Если P+N больше длины строки, то удаляются все символы в строке, начиная с символа с номером P и до конца строки.
Например,
- если S – это строка ’холод’, то после выполнения Delete(S,3,2) значением S станет ’ход’
- если S – это строка ’бумага’, то после выполнения Delete(S,4,10) значением S станет ’бум’
7. Вставка символов в строку
Insert(S1,S2,P) – вставляет строку S1 в строку S2, начиная с позиции P.
Например,
- если S – это строка ’ход’, то после выполнения Insert(’ло’,S,3) значением S станет ’холод’
- если S – это строка ’ум’, то после выполнения Insert(’ш’,S,1) значением S станет ’шум’
8. Преобразование числа в строку
Str(N,S) – преобразует арифметическое выражение, заданное в переменной N, в строку S.
Например,
- после выполнения команды Str(192,S) значением переменной S будет строка ’192’
9. Преобразование строки в число
Val(S,N,P) – преобразует значение, заданное в строке S, к числовому виду, если это возможно, и присваивает это числовое значение переменной N. Если преобразование выполнено, то значение переменной P станет 0, если нет, то P станет равным номеру позиции первого ошибочного символа строки S.
Например,
- если S – строка ’345’, то после выполнения команды Val(S,N,P) значением переменной N будет число 345, а значением переменной P – 0
- если S – строка ’34k5’, то после выполнения команды Val(S,N,P) значение переменной N не изменится, а значением переменной P будет 3