Главная страница |
Навигация по странице: |
Символьный и строковый тип данных. Символьный тип данных Символьный тип Char
К типу 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. Например:
Строковый тип данных Строка — это последовательность символов. Максимальное количество символов в строке (длина строки) может изменяться от 1 до 255. Переменную строкового типа можно определить через описание типа в разделе определения типов или непосредственно в разделе объявления переменных. Переменные: string [максимальная длина строки]; Если максимальная длина строки не указывается, то она равна 255 байт. При вводе строки количество символов в ней определяется автоматически, при этом автоматически заполняется нулевой байт. Для получения длины строки имеется функция length, которая возвращает значение нулевого байта строки. Разумеется, никто не запрещает вводить и выводить строки по отдельным символам, используя любой из операторов цикла. Однако такая необходимость возникает редко. Посимвольный ввод строки стоит реализовать только в том случае, если необходимо совместить ввод и какую-то обработку символов. Посимвольный вывод также удобно использовать для какой-либо нестандартной формы вывода. Операции над строками: 1) Операция сцепления (+) Применяется для соединения нескольких строк. Например: Выражение: 'Turbo' + ' Pascal'+'7.0' Результат: 'Turbo Pascal 7.0' 2) Операции отношения Операции =, < >, >, <, >=, <= выполняют сравнение двух строковых операндов и используются в основном при проверке условий. Сравнение строк производится слева направо до первого несовпадающего символа, и та строка считается большей, в которой код первого несовпадающего символа больше. Такой способ сравнения строк называют лексикографическим. Строки считаются равными, если они совпадают по длине и содержат одни и те же символы. Например:
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; { продолжение программы } |