Песни о Паскале - страница 38

Шрифт
Интервал

стр.

В Паскале есть функция, определяющая количество символов в строке, или, иначе говоря, длину строки. Эта функция так и называется – Length – «длина». Вызвать её можно, например, так:


>      K:= Length(S);


Здесь переменной K целого типа присваивается значение длины строковой переменной S. Вот ещё примеры (в комментариях указаны результаты).


>      S:= ’’; K:= Length(S);       { К=0 }

>      S:= ’PAS’ K:= Length(S);       { К=3 }

>      K:= Length(S+’CAL’);       { К=6 }

>      K:= Length(’Привет, Мартышка!’);       { К=17 }


Распечатка строки

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


>{ P_18_1 – распечатка отдельных символов строки }

>var S: string;

>      C: char;

>      k, L : integer;

>begin

>      repeat

>      Write(’Введите строку: ’); Readln(S);

>      L:= Length(S); { определяем длину строки }

>      for k:=1 to L do begin

>      C:= S[k]; { выбираем очередной символ }

>      Writeln(C); { и печатаем его в отдельной строке }

>      end;

>      until L=0;       { L=0, если строка пуста }

>end.


После ввода запрошенной строки определяем её длину, а затем, пробегая по строке, выбираем и печатаем символы. Программа работает, пока пользователь не введет пустую строку; тогда длина строки L станет равной нулю, и цикл завершится.

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


>{ P_18_2 – распечатка отдельных символов строки, краткий вариант }

>var S: string; k : integer;

>begin

>      repeat

>      Write(’Введите строку: ’); Readln(S);

>      for k:=1 to Length(S) do Writeln(S[k]);

>      until Length(S)=0;

>end.


Здесь функция Length вставлена в оператор FOR, а параметром процедуры Writeln является текущий символ строки S[k]. В цикле FOR выполняется теперь лишь один оператор, поэтому отпала нужда в блоке BEGIN-END. Обратите внимание на условие завершения цикла UNTIL, – оно записано с применением функции Length.

На этом прервем изучение символов и строк. Однако тема не исчерпана, и к ней мы ещё вернемся.

Итоги

• Строки – это цепочки символов. Для работы с отдельными символами в Паскале предусмотрен тип данных CHAR.

• Данные типа CHAR можно «склеивать» друг с другом и со строковыми данными, в результате получаются строки.

• Доступ к отдельным символам строки возможен путем индексации. Эта операция обозначается парой квадратных скобок, следующих за строкой; внутрь скобок помещают числовое выражение – индекс.

• Доступ по индексу применяется как для чтения символов строки, так и для их изменения.

• Для обработки строки необходимо знать её длину. С этой целью в Паскале применяется функция Length.

• Для последовательной обработки символов строки обычно используют цикл со счетчиком FOR-TO-DO.

А слабо?

A) Напишите программу для подсчета букв «А» во введенной пользователем строке. Или слабо?

Б) Напишите программу, меняющую символы «А» строки на символы «Б». Подсказка: изменение символа строки делается оператором присваивания вида S[i]:=…

В) Что делают со строкой S следующие операторы?


>      for i:=1 to Length(S) do S:= S + S[i];

>      for i:=Length(S) downto 1 do S:= S + S[i];


Проверьте свои предположения на практике.

Г) Записи телефонных номеров обычно содержат дополнительные символы: скобки, черточки, пробелы, например: 8(123)45-67-89. Предположим, что пользователь их так и вводит. Пусть ваша программа удалит из такой строки все символы, кроме цифр. Например, после ввода указанного выше номера она должна напечатать: 8123456789.

Д) Пусть ваша программа напечатает введенную пользователем строку вразрядку, добавляя подчёркивание либо пробел после каждого символа, например: 'Pascal' преобразует в 'P_a_s_c_a_l'.

Глава 19

Процедуры и функции: разделяй и властвуй



Снежный ком

Чем дальше в лес, тем больше дров, – наши программы становятся все замысловатей! Чем измеряют сложность программ? – усилиями, что потребны на их осмысление. С ростом размера программы её сложность растет снежным комом: так программа в десять страниц стократ сложней одностраничной! Почему?


стр.

Похожие книги