Обработка символьной информации. строки

Обработка символьной информации

До сих пор в основном рассматривались программы, предназначенные для обработки числовых данных. Обработка символьных (литерных) данных становится возможной благодаря привлечению значений и переменных типа char.

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

Например:

var u : char;

u := ‘b’; write(u); при этом на экране печатается b.

Символы, подготовленные для ввода, не отделяются друг от друга никакими знаками. Если три символа будут вводиться с помощью read(a, b,c), то можно будет набрать на клавиатуре чшщ (без пробела).

Все множество символов считается упорядоченным. Упорядоченность получается так: из всех символов составлен список, и из двух символов меньше тот, который встречается в списке раньше.

Например:

‘a’ < ‘b’ < … < ‘z’

‘A’ < ‘B’ < … < ‘Z’

‘0’ < ‘1’ < … ‘9’

При построении условий, например, располагающихся после if и while, можно использовать разнообразные отношения в множестве символов: =, <>, >, >=, <, <=. Например, ‘a’ < ‘c’; ‘3’ > ‘1’.

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

var c : char;

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

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

при этом в первом случае на экране появится abcdefg…xyz, а во втором – zyx…gfedcba.

В следующих двух примерах будут приведены программы, которые предназначены для исследования и преобразования символов, предшествующих символу / в последовательности данных символов.

Пример 7.1 Программа замены всех восклицательных знаков точками.

program p71;

var c : char;

begin read(c);

while c <> ‘/’ do

begin if c = ‘!’ then write(‘.’) else write(c);

read(c);

end;

end.

Пример 7.2 Программа выбрасывания групп символов, расположенных между скобками (,). Сами скобки тоже выбрасываются. Предполагается, что внутри каждой пары скобок нет других скобок.

program p72;

var c : char; i : integer;

begin i := 0; read(c);

while c <> ‘/’ do

Begin

if c = ‘(‘ then i := 1 else

if c := ‘)’ then i := 0 else

if i = 0 then write(c); read(c)

End

End.

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

a

ab

abc

abc…xyz

program p73;

var c, d : char;

Begin

for c := ‘a’ to ‘z’ do

Begin

for d := ‘a’ to c do write(d);

writeln

End

End.

Высказывание «значение переменной а типа char есть буква» может быть записано так: (а >= ‘a’) and (a <= ‘z’) или a in [‘a’..’z’]. Для проверки, является ли значением а цифра можно составить выражение а in [‘0’..’9’].

Пример 7.4 Программа читает первое слово в тексте и печатает число букв в нем.

program p74;

var c : char; i : integer;

Begin

i := 0; repeat read(a) until c in [‘a’..’z’];

repeat i := i + 1; read(c) until not (c in [‘a’..’z’]);

writeln(‘Число букв в первом слове текста:’, i:2)

End.

Задание 7.1

1. Всегда ли справедливо следующее утверждение:

а) если с литера и ‘0’ £ ‘9’, то с – цифра;

б) если с – литера и ‘a’ c ‘z’, то с – строчная латинская буква;

в) ‘9’ < ‘a’;

г) ‘0’ = 0;

д) ord(‘0’) = 0;

е) ‘a’ = ‘A’;

ж) если с и d – литеры, то с < d тогда и только тогда, когда ord(c) < ord(d);

з) ord(chr(k)) = k для любого целого k;

и) chr(ord(c)) = c для любой литеры с.

2. Вычислите значения выражений:

а) pred(‘7’); б) succ(‘0’) = pred(‘2’);
в) ord(‘5’) – ord)(‘0’); г) ‘d’ < ‘a’;
д) ord(‘q’) < ord(‘z’); е) chr(25)>= chr(16);
ж)ord(pred(chr(24))); з) chr(ord(‘5’) + 1).

3. Имеется символьная переменная d. Присвойте логической переменной t значение true, если выполняется указанное условие, и значение false в противном случае:

а) значение d – это литера ‘*’;

б) значение d – литера ‘a’ или ‘q’;

в) значение d – цифра.

4. Определите значение переменной d после выполнения следующих операторов:

а) c := ‘+’; d := c; б) c := ‘+’; d := ‘c’.

5. Вычислите s – сумму порядковых номеров всех букв, входящих в слово SUM.

6. Напечатайте текст, образованный литерами с порядковыми номерами 65, 71 и 69.

7. Символьной переменной next присвойте цифру, следующую за цифрой, являющейся значением символьной переменной dig, считая при этом, что за ‘9’ следует ‘0’.

8. Логической переменной f присвойте значение true, если между буквами ‘a’ и ‘z’ нет иных символов, кроме строчных латинских букв, и значение false иначе.

9. Напечатайте заданный непустой текст:

а) удалив из него все цифры и удвоив знаки «+» и «-«;

б) удалив из него все знаки «+», непосредственно перед которыми идет цифра.

10. Выведите в одну строку ABBCCC…ZZ…Z.

11. Выведите в одну строку ZYY…AA…A.

12. Выведите треугольник

A B C … Z

B C … Z

… Z.

Строки

Строка (string) – это структурированный тип, во многом похожий на массив символов. Основное отличие – число символов в строке динамическое: от 0 (пустая строка) до указанной при описании максимальной длины, в то время как для массивы число элементов в нем фиксировано. Если максимальная длина не указана при объявлении строковой переменной, то предполагается максимально возможная длина – 255 символов. Например:

var s : string [20];

Каждая строковая переменная занимает на один байт больше – в нулевом байте хранится фактическая длина строки.

Строковые выражения состоят из строковых констант, переменных, функций и операций.

Знак + в операциях со строками означает сцепление. Длина результата при этом не больше 255 символов.

Над строковыми данными допустимы и операции отношения.

Наши рекомендации