Тема 7. Символьные типы данных. Обработка символьных данных

Ранее мы уже познакомились с тремя типами переменных: Integer, Real, Boolean. Каждый такой тип характеризуется тем, что мог иметь лишь определенные значения. Так, например, только целые числа задаются единственными значениями, которые могут принимать целые числа. Было бы очень удобно, если бы мы сами могли ввести любые типы переменных с помощью, например, объявления у каждого типа списка всех возможных значений.

Паскаль дает такую возможность – с помощью типа данных Char. Возможными значениями (результатами) переменных типа char являются буквенные или цифровые символы, например, буква В или цифра 1 (символ).

Char – сокращенное от Character – символ. Char относится к стандартным типам. Стандартный тип – это такой тип, который достаточно только объявить, чтобы для транслятора компьютера была полная ясность относительно всех возможных значений, присваиваемых переменным. Таким образом, известны все возможные результаты, и не нужно заранее их объявлять.

Значениями символьного типа char являются элементы конечного и упорядоченного множества символов, зависящего от реализации. В языке Borland Pascal это множество состоит из 256 символов, пронумерованных от 0 до 255. В число этих символов входят все символы. Которые вы можете получить на экране с помощью нажатия какой-либо клавиши или комбинации клавиш, а также некоторые другие символы в том числе и невидимые. Какие именно символы являются константами данного типа, зависит от того. Какая кодовая таблица используется в момент выполнения (а не написания) программы. То есть одна и та же программа, например, печатающая изображение всех символов кодовой таблицы, на компьютерах с различными текущими кодировками будет иметь различные результаты работы. Обычно первые 128 символов с кодами от 0 до 127 всегда соответствуют так называемым “ASCII-символам”, а остальные 128 в различных таблицах используются для кодировки букв того или иного национального алфавита, символов псевдографики и т.п. Кроме того первые 32 символа считаются управляющими, а остальные – изображаемыми, т.е. имеющими графическое изображение (пробел, имеющий код 32, относится уже к изображаемым символам). Управляющие символы должны восприниматься устройствами вывода и ввода текста как команды, например:

Таблица 2.11

Символ Действие Английское название
  Подача стандартного звукового сигнала Beep
  Признак конца строки текстового файла End Of Line (EOLn)
  Перевод строки Line Feed (LF)
  Признак конца файла End Of File (EOF)

Компилятор с языка программирования может обрабатывать управляющие символы определенным в нем нестандартным образом. Например, в языке Delphi все первые 33 символа, включая пробел, считаются разделителями при вводе информации, т.е. практически любым из них можно отделять. Например, числа при вводе из файла или с клавиатуры.

В тексте программы константы символьного типа записываются двумя способами. Наиболее наглядный из них – это заключение любого изображаемого символа в апострофы. Например: ‘*’, ‘F’, ‘1’. Второй способ позволяет задавать любые символьные константы, в том числе и соответствующие управляющим символам, по их кодам. В этом случае обозначение константы начинается с символа «#», за которым следует десятичный код (т.е. номер от 0 до 255) соответствующего символа. Например: #13, #26, #65. Если же мы считываем значение символьной переменной с клавиатуры или из файла, то соответствующий символ должен быть набит уже без апострофов. А если считывается последовательность символов (текст), то они набиваются все подряд, без разделителей, так как пробел, и другие разделители числовых констант также являются значимыми символами.

Итак, переменным типа Char мы можем присваивать стандартные символы (буквенные или цифровые). В соответствии с правилами подобным переменным в каждом случае могут в качестве возможных значений присваиваться следующие знаки:

1) заглавные буквы от A до Z;

2) цифровые символы от 0 до 9;

3) пропуски (или пробелы);

4) знаки операций, скобки и т.д.

Исключением составляет штрих(апостроф) ‘, имеющий специальное назначение.

Если в программе имеется описание

u,v: char;

то возможны, например, операторы присваивания

u:= ' a '; u:=v; v:= ' * ';

Штрих (апостроф) – ‘ – принятая в Паскале форма кавычки употребляется всякий раз, когда значение типа char явно указывается в программе. Выполнение операторов

u:= ' b '; write(u);

приводит к высвечиванию на экране символа b.

Каждый символ имеет свой порядковый номер, благодаря чему в работе с символами можно использовать стандартные функции pred (x), succ (x), ord (x) и chr (x).

Пример 1. Демонстрация работы функции pred (x) и succ (x).

Результат программы: L pred=K succ=M
Program prim1; var x 1 ,x 2 ,x 3: char; begin x 1:= 'L'; writeln(x 1); x 2:=pred(x 1); writeln('pred=', x 2); x 3:=succ(x 1); writeln('succ=', x 3); end.

Пример 2. Демонстрация работы функций ord (x) и chr (x).

Результат программы: L L
Program prim2; var n: integer; x: char; begin x:= 'L'; writeln(x); n:=ord(x); writeln(n); x:=chr(n); writeln(x); end.

Для переменных типа char в качестве условий после служебных слов IF и WHILE могут употребляться отношения

' a ' =v; u=v; v<> ' b ';

а также построенные на их основе составные условия.

Пример 3. Даны символы s1,s2,… Известно, что символ s1 отличен от символа «/» и что среди s2,s3,… есть хотя бы один символ «/». Пусть s1…sn - символы данной последовательности, предшествующие первому символу «/» (n заранее не известно). Программа подсчета восклицательных знаков среди s1…sn.

Решение:

Program prim3; var c: char; n: integer; begin read(c); n:=0; while c <> '/' do begin if c ='! ' then n:= n +1; read(c); end; write(n); end.

При построении условий, располагающихся после IF и WHILE, можно использовать разнообразные отношения в множестве символов. Здесь возможен не только знак «=» и комбинация «<>», но также <, <=, >, >=, т.к. все множество символов считается упорядоченным. Упорядоченность получается так: из всех символов составлен список, и из двух символов меньше тот, который встречается в списке раньше.

Поэтому, например, ' a ' < ' c ', ' y ' > ' x ', '3'>'1'. В остальном вопрос порядка решается по-разному на разных компьютерах.

Упорядоченность открывает возможность использования в программах операторов цикла с параметром, имеющим тип char. Параметр цикла, имеющий тип char, пробегает ряд символов в указанных границах.

Выполнение оператора цикла

for c:= ' a ' to ' z ' do write(c);

где с: char, приводит к высвечиванию на экране всех малых букв латинского алфавита.

Выполнение оператора

for c:=’z’ downto ‘a’ do write(c);

приведет к высвечиванию этих же букв в обратном порядке.

Пример 4. Программа вывода последовательностей букв

a ab abc ……. abcd…z
Program prim4; var c,d: char; begin for c:= ' a ' to ' z ' do begin for d:= ' a ' to c do write(d); write(' '); end; end.

Пример 5. Дана последовательность символов. Определить существуют ли в данной последовательности хотя бы одна латинская буква предшествующая символу «/». Если таковая имеется, выдать соответствующее сообщение на экран.

Решение:

Program prim5; label1; var c: char; begin read(c); while c <>'/' do if (‘a’<=c) and (c<= ' z ') then begin write (' есть '); goto 1; end else read(c); write(' нет '); 1: end.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: