К типу Char применимы следующие встроенные функции:
1) Функция Chr (x: byte): char. Возвращает символ, соответствующий ASCII - коду числа x;
2) Функция Ord (x: char):Byte. Возвращает число, соответствующее символу x в ASCII - таблицы;
3) Функция UpCase (x: char): char. Преобразует символы из строчных букв в прописные, но распространяется только на литеры латинского алфавита, русские просто игнорируются;
4) Функция Pred (x:CHAR): char. Возвращает символ, который предшествует в ASCII таблице символу x,
5) Функция Succ (x; Char): char. Возвращает символ, который следует в ASCII - таблице за символом x.
Например:
-
оrd ('A') = 65
-
chr (128) = 'Б'
-
pred ('Б') = 'A'
-
succ ('Г') = 'Д'
-
upcase ('n') = 'N'
Строковый тип данных
Строка — это последовательность символов. Максимальное количество символов в строке (длина строки) может изменяться от 1 до 255. Переменную строкового типа можно определить через описание типа в разделе определения типов или непосредственно в разделе объявления переменных.
Переменные: string [максимальная длина строки];
Если максимальная длина строки не указывается, то она равна 255 байт.
При вводе строки количество символов в ней определяется автоматически, при этом автоматически заполняется нулевой байт. Для получения длины строки имеется функция length, которая возвращает значение нулевого байта строки.
Разумеется, никто не запрещает вводить и выводить строки по отдельным символам, используя любой из операторов цикла. Однако такая необходимость возникает редко. Посимвольный ввод строки стоит реализовать только в том случае, если необходимо совместить ввод и какую-то обработку символов. Посимвольный вывод также удобно использовать для какой-либо нестандартной формы вывода.
Операции над строками:
1) Операция сцепления (+)
Применяется для соединения нескольких строк.
Например:
Выражение: 'Turbo' + ' Pascal'+'7.0'
Результат: 'Turbo Pascal 7.0'
2) Операции отношения
Операции =, < >, >, <, >=, <= выполняют сравнение двух строковых операндов и используются в основном при проверке условий. Сравнение строк производится слева направо до первого несовпадающего символа, и та строка считается большей, в которой код первого несовпадающего символа больше. Такой способ сравнения строк называют лексикографическим. Строки считаются равными, если они совпадают по длине и содержат одни и те же символы.
Например:
Выражение |
Результат |
'Иванов' = 'Иванов И.И.' |
false |
'Иванов' < 'Иванов И.И.' |
true |
'program'='PROGRAM' |
true |
3) Функция delete(st, poz, n) — удаление n символов строки st, начиная с позиции poz. Если значение poz больше, чем размер строки, ничего не удаляется.
При удалении символов оставшаяся часть строки подтягивается к началу, чтобы занять образовавшуюся после удаления "дырку".
Например:
st: = 'peкa Волга'; delete(st, 1, 5); { в результате st='Boлгa' }
Следующий фрагмент программы удаляет все пробелы из начала строки st (пробелы в начале строки называются ведущими пробелами):
while st[l]=' ' do delete(st,1,1) ;
4) Функция insert(str1, str2, poz) — вставка строки str1 в строку str2, начиная с позиции poz. He перепутайте: первый параметр - что вставляем, второй - куда.
Например:
sl:= 'Я разрабатываю программы'; s2 := 'хорошие ';
insert (s2,sl, 16) ;
{ в результате sl='Я разрабатьшаю хорошие программы' }
При вставке строка раздвигается, чтобы вместить вставляемые символы.
При вставке в начало и конец строки действие процедуры insert аналогично выполнению операции конкатенации. Так, например, для вставки звездочек в конец строки можно использовать
s:=s+'*' на insert ('*', s, length (s)+1).
Обратите внимание — при вставке символов обязательно нужно контролировать длину полученной строки, чтобы не потерять последние символы. При этом никакого сообщения об ошибке не выдается даже при включенной директиве {$R+}.
5) Функция length(st) — вычисляет текущую длину в символах строки st. Результат имеет целочисленный тип.
Например, n:=length('123456789'); { n=9 }
6) Функция copy(st, poz, n) — выделяет из строки st подстроку длиной n символов, начиная с позиции poz. Если poz больше длины строки, то результатом будет пустая строка.
Например:
sl: = 'Turbo Pascal';
s2:=copy (s1, 1,5) ;
s3:=copy(sl,7,3) ;
{ в результате s2='Turbo'; s3='Pas' }
7) Функция concat(str1, str2,..., strn) — выполняет сцепление строк str1, str2, ... strn в том порядке, в каком они указаны в списке параметров.
Например: s:=concat('AA', 'XX', 'Y'); ( в результате s='AAXXY'; }
Функция concat выполняет те же действия, что и операция конкатенации. Например, для приведенного случая то же самое можно было записать так: s: = 'AA' + 'XX' + 'Y';.
8) Функция pos(strl, str2) — обнаруживает первое появление в строке str2 подстроки str1. Результат имеет целочисленный тип и равен номеру той позиции, где находится первый символ подстроки str1. Если в str2 подстроки str1 не найдено, результат равен 0.
Например:
s1:= 'Turbo Pascal';
n1:=pos{'Pascal',s1); n2:=pos('pascal', s1);
{В результате n1=7; n2=0 (pascal и Pascal - это разные строки)}
9) Функция str(number, st) — преобразование числового значения величины number в строку st. После number может записываться формат, аналогичный формату вывода. Если в формате указано недостаточное для вывода количество разрядов, поле вывода расширяется автоматически до нужной длины. Удобно использовать процедуру str для вставки числовых данных в какой-либо текст, т. к. операция конкатенации и процедура insert могут работать только со строковыми данными.
Например:
var Sl,S2,s3,s4 : string; num1: integer; num2: real;
…
num1: =5; num2:=5.78;
str (num1, S1) ;str (num1:3,s2) ; str (num2, s3) ; str (num2: 3:1, s4);
{ в результате s1='5'; S2=' 5'; s3='5.780000000000E+00'; s4='5.8'; }
10) Функция val(st, number, code) — преобразует значение st в величину целочисленного или вещественного типа и помещает результат в numder. Сode - целочисленная переменная. Если во время операции преобразования ошибки не обнаружено, значение code равно нулю, если ошибка обнаружена (строковое значение не переводится в цифровое), code будет содержать номер позиции первого ошибочного символа, а значение number не определено.
Например:
s1:= '5.78'; s2:= '5,78';
val(s1,num1, cod1);
val(s2,num2,cod2);
{ в результате cod1=0, cod2=2 - второй символ ошибочный }
Обратите внимание — использование функции val позволяет избежать неприятной ошибки выполнения Invalid numeric format, возникающей при неправильном вводе числовых данных. Приходится прибегать к такой хитрости — вводить вместо числовой переменной строковую (в ней разрешены любые символы). После этого введенная строка преобразуется в число и, если преобразование невозможно, об этом выводится сообщение на русском языке. Чаще всего в таких случаях не прерывают программу, а просят пользователя повторить ввод. Здесь очень удобно использовать цикл repeat, т. к. гарантируется выполнение тела цикла хотя бы один раз.
Например:
var s:string; n, error: integer;
begin
repeat
write('Введите число '); { просим ввести чиспо, }
readln(s); { а вводим строку }
val(s,n,error); { преобразуем строку в число }
if error>0 then writeln('Неверный символ № ', error);
until error=0;
{ продолжение программы }