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

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


>type TStrA = string[11]; { строка для 11 символов }

>      TStrB = string[31]; { строка для 31 символа }

>var A : TStrA;       B : TStrB;


Здесь объявлены два строковых типа данных; первый из них вмещает до 11 символов, а второй – до 31. Соответственно переменная A будет занимать в памяти 12 байтов, а переменная B – 32 байта (с учетом нулевого байта). Согласитесь, – экономия солидная, особенно для массива из таких строк. Во всем остальном, кроме размера, короткие строки ничем не отличаются от переменных типа STRING.

А что случится при копировании длинной строки в короткую? А ничего, – не вместившиеся символы будут «отрублены». Следующая ниже программа «P_44_1» подтверждает это, испытайте её.


>{ P_44_1 – укороченные строки }

>var S1 : string;       { размер строки по умолчанию = 255 }

>      S2 : string[5]; { размер укороченной строки = 5 символов }

>begin

>S1:='abc';       S2:='abcdefgh';


>Writeln('Строка S1: Размер =', SizeOf(S1):4,' Длина = ', Length(S1):4,' Значение= '+S1);

>Writeln('Строка S2: Размер =', SizeOf(S2):4,' Длина = ', Length(S2):4,' Значение= '+S2);


>Writeln('Нулевой байт строки S1 = ', Byte(S1[0]));

>Writeln('Нулевой байт строки S2 = ', Byte(S2[0]));

>Readln;

>end.


Операции со строками

Итак, уяснив внутреннее устройство строк, обратимся к связанным с ними операциям. Что мы умеем делать со строками сейчас? А вот что:

• вводить и выводить строки процедурами ввода и вывода;

• объединять несколько строк в одну (складывать);

• определять длину строки функцией Length;

• проверять строки на равенство и неравенство;

• обращаться к отдельным символам строки (доступ по индексу).

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

• искать одну строку внутри другой;

• копировать часть строки в другую строку;

• вставлять одну строку внутрь другой;

• удалять часть символов из строки;

• сравнивать две строки в смысле алфавитного порядка.

Рассмотрим всё это подробней. Представленные далее объявления процедур и функций даны мною лишь для пояснений, их не надо вставлять в программы.

Поиск в строке (Pos)

Функция Pos ищет одну строку внутри другой, её объявление выглядит так:


>      function Pos(SubS: string; S: string): Integer;


Функция принимает два параметра:

• SubS – подстрока, которую ищут (то есть фрагмент строки);

• S – строка, в которой ищут.

Если искомый фрагмент SubS найден, функция возвращает его позицию – индекс первого символа SubS внутри строки S, а иначе возвращает ноль. Если строка S содержит несколько искомых фрагментов, возвращается индекс первого из них. Вот примеры.


>      S:= 'BORLAND PASCAL';

>      p:= Pos('LA', S);       { 4 }

>      p:= Pos('PAS', S);       { 9 }

>      p:= Pos('pas', S);       { 0 – подстрока не найдена }

>      p:= Pos('A', S);       { 5 – первая из трех букв "A" }


Искомым фрагментом может быть и отдельный символ. Поиск ведется с учетом регистра; это значит, что заглавная и строчная буквы «P» считаются разными буквами.

Копирование части строки (Copy)

Функция Copy возвращает часть заданной строки.


>      function Copy(S: string; Index, Count: Integer): string;


Входных параметров три:

• S – строка, из которой копируются символы;

• Index – индекс первого копируемого символа;

• Count – количество копируемых символов.

А вот примеры её применения.


>      S:= ’Free Pascal forever!’;

>      T:= Copy(S, 6, 6);       { ’Pascal’ }

>      T:= Copy(S, 6, 255); { ’Pascal forever!’ }


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

Вставка в строку (Insert)

Объединять строки сложением просто. А если надо вставить строку в середину другой? Тогда обратитесь к процедуре Insert.


>      procedure Insert(S1: string; var S2: string; Index: Integer);


Входные параметры:

• S1 – вставляемая строка;

• S2 – ссылка на принимающую строку;

• Index – позиция вставки.

Вот один пример.


>      S:='Спартакчемпион!';

>      { В позицию 8 вставляются три символа: тире и два пробела }

>      Insert(' – ', S, 8);       { Спартак – чемпион! }


Если позиция вставки превышает длину строки S2, то строка S1 добавится в конец S2. Если длина итоговой строки S2 превысит допустимый размер, лишние символы будут отброшены.

Удаление символов из строки (Delete)

Говорят: ломать – не строить. Попытайтесь, однако, удалить часть символов из строки. Слабо? А процедура Delete справляется с этим играючи.


>      procedure Delete(var S: string; Index, Count : Integer);


Параметры таковы:

• S – ссылка на строку;

• Index – индекс первого удаляемого символа;

• Count – количество удаляемых символов.

Вот пример её применения.


>      S:= ’Free Pascal forever!’;

>      Delete(S, 6, 7);       { ’Free forever!’ }


Сравнение строк

Мы уже сравнивали строки на равенство (вспомните проверку пароля). Но строки сравнивают и на больше–меньше — лексикографически. При этом сравниваются слева направо коды символов двух строк в смысле их алфавитного порядка. Если длины строк разные и короткая совпадает с началом длинной, то большей считается длинная строка. Вот примеры:


>      Writeln (’Borland’ > ’Pascal’); { false }


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

Бог умер на кресте и сгнил, согласно научной картине мира, оставив своих детей. Либеральная Цивилизация решает покончить с "колыбелью человечества" и запускает в Солнце шаттлы с ядерными боеголовками. Теперь над Землей довлеет Багровый глаз. И он растет каждый час. Сможет ли Цивилизация сделать новый эволюционный шаг в виртуальный мир и вырезать из своих мозгов Архетип? Или Рай и жизнь для удовольствия – лишь дегенеративная сказка? Выдержит ли Прогресс экспансию Евразии или он обречен быть утопленным в животной религиозности? Знакомьтесь! Дьявол, заточенный в теле инвалида-гомосексуалиста, хлыстовка, ставшая Великой блудницей, самозванец, занявший опустевший трон Бога, а также отважные психонавты и другие неординарные личности сойдутся в напряженной схватке, чтобы решить, сохранит ли человек Образ Божий или станет чем-то другим? Роман-антиутопия "Разбитый Адам" повествует о развитии и столкновении апокалиптических проектов Евразии и западной цивилизации в середине 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-- Шолом алейхем.-- Алейхем ашшалом. Э-э-э...-- Ну и что вы хочите сказать этим своим бесконечным "э-э-э", которое звучит как призыв взволнованной беременной овцы к заезжему акушеру в тот волнительный момент, когда уже поздно и опорос пошёл?-- Уважаемые! Я не знаю об чём вы тут спорите, но ехать уже пора!-- Золотые слова.


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

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


Ряска Правды

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


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

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