Песни о Паскале - [95]

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

>      Writeln (’ABC’ > ’AB’);   { true }

>      Writeln (’ABC’ > ’abc’);  { false }

>      Writeln (’45’ > ’1000’);  { true, поскольку ’4’ > ’1’ }


В первом примере код буквы «B» меньше кода буквы «P», поэтому левая строка меньше правой. Во втором случае первые символы совпадают, но левая строка длиннее, а значит больше. В третьем примере левая строка меньше, — тоже в соответствии с таблицей кодировки. Обратите внимание на неожиданный результат сравнения строк, составленных из цифр, — это вам не числа!

Сравнивая строки, можно отсортировать их в лексикографическом порядке (как если бы они располагались в словаре). К сожалению, такое сравнение работает только для латинских букв, для русских оно не всегда верно, приходится изобретать свою функцию сравнения (в DELPHI этой проблемы нет).

Перевод символов в верхний регистр (UpСase)

Функция UpСase меняет код латинской буквы, переводя её из нижнего в верхний регистр. Иными словами, она превращает строчную (маленькую) латинскую букву в заглавную (большую). Объявление функции таково.


>      function UpCase(Ch: Char): Char;


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


>      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 и так далее.

Д) Вращение строки вправо. Напишите процедуру, перемещающую 1-й символ строки на место 2-го, 2-й – на место 3-го и т.д. Последний символ должен занять 1-е место. Примените средства обработки строк.


Рекомендуем почитать
Разбитый Адам

Бог умер на кресте и сгнил, согласно научной картине мира, оставив своих детей. Либеральная Цивилизация решает покончить с "колыбелью человечества" и запускает в Солнце шаттлы с ядерными боеголовками. Теперь над Землей довлеет Багровый глаз. И он растет каждый час. Сможет ли Цивилизация сделать новый эволюционный шаг в виртуальный мир и вырезать из своих мозгов Архетип? Или Рай и жизнь для удовольствия – лишь дегенеративная сказка? Выдержит ли Прогресс экспансию Евразии или он обречен быть утопленным в животной религиозности? Знакомьтесь! Дьявол, заточенный в теле инвалида-гомосексуалиста, хлыстовка, ставшая Великой блудницей, самозванец, занявший опустевший трон Бога, а также отважные психонавты и другие неординарные личности сойдутся в напряженной схватке, чтобы решить, сохранит ли человек Образ Божий или станет чем-то другим? Роман-антиутопия "Разбитый Адам" повествует о развитии и столкновении апокалиптических проектов Евразии и западной цивилизации в середине 27-го столетия.


Круг Камней: Кровь эльфов

Давняя вражда между эльфами и людьми вспыхнула с новой силой. Эльфы завоевывают все новые территории и мечтают уничтожить Империю людей. Армия чудовищ, запечатанная в древнем эльфийском городе, оказалась на свободе. Неведомым образом все это связано с магией Круга Камней, о которой люди ничего не знают. Дознаватель Кристиан Уорден, несостоявшийся боевой маг, мечтавший о спокойной жизни советника лорда-правителя, оказался в эпицентре войны. Теперь ему придется совершить невозможное, чтобы выяснить правду о таинственном Круге и остановить врагов.


Столократия

15/09/2017rusamlib.ruhttp://samlib.rusamlib.ru2017-09-15 11:40:17http://samlib.ru/w/wbirjuk/zver_kc20doc.shtmlsamlib59bb91f724b474.929370741.0Бирюк В.Зверь Лютый. Книга 20. СтолократияЗверьлютыйКнига 20. СтолократияЧасть 77. "Увидишь клад, какого не..."Глава 419-- Шолом алейхем.-- Алейхем ашшалом. Э-э-э...-- Ну и что вы хочите сказать этим своим бесконечным "э-э-э", которое звучит как призыв взволнованной беременной овцы к заезжему акушеру в тот волнительный момент, когда уже поздно и опорос пошёл?-- Уважаемые! Я не знаю об чём вы тут спорите, но ехать уже пора!-- Золотые слова.


Новая религия

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


Ряска Правды

Люди до смерти боятся нечисти, обходят болото стороной. Нечисть, в свою очередь, презрительно фыркает, воротит нос и выбираться из чащоб не спешит. Впрочем, везде встречаются мечтатели — неправильную кикимору по имени Златеника тянет прочь, на свободу. Когда на берегу болота откуда ни возьмись является очаровательный принц, Ника принимает его деловое предложение. Вот только болото не отпускает так просто. Да и люди так просто не принимают. Во дворце гадюк больше, чем на топи. А если ещё и помочь темному магу…


Новороссия. Год войны

Предлагаемая книга посвящена событиям в Новороссии. Её героям и её жертвам. Предпринята попытка подробно рассмотреть первый год донбасской войны, от государственного переворота в Киеве до подписания вторых Минских соглашений. Читатель сможет ближе познакомиться с геополитической и экономической подоплёкой украинской трагедии, давшей старт очередной попытке Запада развалить и колонизировать Россию.