Читаем Песни о Паскале полностью

Входной параметр – символ, а возвращается почти тот же символ, только «подросший», вот примеры.


      c:= UpCase(’r’);       { ’R’ }

      c:= ’n’;

      c:= UpCase( c );       { ’N’ }


Подсунув этой функции большую латинскую букву, цифру или знак препинания, вы получите назад свой символ неизменным. То же будет и с русскими буквами – они не обрабатываются функцией UpСase.


      c:= UpCase(’R’);       { ’R’ }

      c:= UpCase(’8’);       { ’8’ }

      c:= UpCase(’ы’);       { ’ы’ }


Функцией UpСase обычно приводят введенные строки к определенному виду. Ведь пользователь может ввести данные как заглавными, так и строчными буквами, а это иногда мешает правильной обработке строки.

Ознакомившись со строковой теорией, применим её, что называется, «в бою».

Подсчет слов в строке

Вот вам строка, посчитайте в ней количество слов «Pascal». Чуть подумав, вы остановитесь на функции Pos, – ведь она возвращает позицию искомого слова. Но функция обнаруживает лишь первое вхождение фрагмента, а как быть с остальными? Я предлагаю постепенно разрушать исходную строку. То есть, найдя искомый фрагмент, будем удалять его из строки и снова повторять поиск. На этом и построена программа «P_44_2».


{ P_44_2 - Подсчет слов «PASCAL» в строке }

var S : string; { исходная строка }

      p : integer; { позиция в строке }

      c : integer; { счетчик слов }

begin

S:='Лучший язык программирования – это PASCAL!'+

      'Изучите PASCAL! PASCAL не подведет!';

c:=0;

repeat

      p:= Pos('PASCAL', S); { ищем слово «PASCAL» }

      if p>0 then begin       { если нашли }

      Inc(c);       { то наращиваем счетчик }

      { и удаляем это слово из строки }

      Delete(S, p, Length('PASCAL'));

      end

until p=0;       { выход, если слов «PASCAL» больше нет }

Writeln('Найдено слов PASCAL: ',c); Readln;

end.


Контекстная замена

Любой текстовый редактор умеет заменять одну подстроку на другую, – это называется контекстной заменой. Устроим такую замену в строковой переменной. Итак, дана строка, содержащая несколько слов «Pascal». Заменим все вхождения слова «Pascal» словом «Паскаль» (чем не англо-русский переводчик?).

Разобравшись с предыдущей задачей, вы легко одолеете и эту. Для проверки вашего решения сравните его с моим («P_44_3»).


{ P_44_3 - Замена слов «Pascal» на «Паскаль» }

var S : string; { исходная строка }

      p : integer; { позиция в строке }

begin

S:='Лучший язык программирования – Pascal! '+

      'Изучите Pascal! Pascal не подведет!';

Writeln(S); { исходная строка }

repeat

      p:= Pos('Pascal', S);       { ищем слово 'Pascal' }

      if p>0 then begin       { если нашли }

      { удаляем это слово из строки }

      Delete(S, p, Length('Pascal'));

      { и вставляем в этом месте слово 'Паскаль'}

      Insert('Паскаль', S, p);

      end

until p=0; { выход, если слов 'Pascal' больше нет }

Writeln(S); { строка результата }

Readln;

end.


Итоги

• Строка родственна массиву символов. Дополнительный нулевой элемент этого массива содержит длину строки.

• Строка, объявленная без указания размера, по умолчанию занимает 256 байтов памяти и может содержать до 255 символов.

• Для экономии памяти используют строки меньшего размера. При объявлении таких строк размер указывают внутри квадратных скобок после слова STRING.

• В Паскале предусмотрен ряд встроенных процедур и функций, облегчающих обработку строк.

А слабо?

А) Напишите процедуру, переводящую все символы строки (латинские буквы) к верхнему регистру.

Б) Напишите функцию для приведения любой буквы к верхнему регистру (включая и русские). Подсказка: вспомните о таблице кодировки.

В) Напишите функцию для приведения любой буквы к нижнему регистру.

Г) Напишите собственные процедуры и функции обработки строк, повторяющие те, что встроены в Паскаль. Дайте им названия, похожие на стандартные, например: MyCopy, MyDelete и так далее.

Перейти на страницу:

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

Сломанная кукла (СИ)
Сломанная кукла (СИ)

- Не отдавай меня им. Пожалуйста! - умоляю шепотом. Взгляд у него... Волчий! На лице шрам, щетина. Он пугает меня. Но лучше пусть будет он, чем вернуться туда, откуда я с таким трудом убежала! Она - девочка в бегах, нуждающаяся в помощи. Он - бывший спецназовец с посттравматическим. Сможет ли она довериться? Поможет ли он или вернет в руки тех, от кого она бежала? Остросюжетка Героиня в беде, девочка тонкая, но упёртая и со стержнем. Поломанная, но новая конструкция вполне функциональна. Герой - брутальный, суровый, слегка отмороженный. Оба с нелегким прошлым. А еще у нас будет маньяк, гендерная интрига для героя, марш-бросок, мужской коллектив, волкособ с дурным характером, балет, секс и жестокие сцены. Коммы временно закрыты из-за спойлеров:)

Лилиана Лаврова , Янка Рам

Современные любовные романы / Самиздат, сетевая литература / Романы