Найти в Дзене

Строки в Lazarus

Я говорю “строки в Lazarus”, потому что для всех опытов и примеров использую именно Lazarus. Но в большинстве случаев то, что работает в Lazarus, будет работать и в Delphi и в других реализациях Паскаля.

Строка - это набор символов. В большинстве языков (ну по крайней мере в языках “старой школы”) строку можно трактовать как массив пронумерованных символов. В С/С++, например, первый символ в этом массиве будет иметь индекс 0. А вот в Паскале традиционно первый символ имеет индекс 1. И у того и у другого подхода есть свои причины, но не будем на этом останавливаться.

В Паскале строка заключается в одинарные кавычки (апострофы). Типов данных, связанных со строками, в Lazarus довольно много. Вот лишь некоторые из них:

  • String
  • ShortString
  • AnsiString
  • UTF8String
  • UnicodeString

И это далеко не всё. Однако в большинстве случаев вполне достаточно возможностей типа String, который был ещё в старом добром Турбо Паскале. Объявить строковую переменную можно так:

var st : string;

Где st - любой допустимый для Паскаля идентификатор. По умолчанию длина такой строки равна 255 символов. Однако можно явно указать длину строки. Пример:

var s8 : string[8];

Эта строка будет иметь длину 8 символов, и если вы попытаетесь записать в неё большее количество знаков, то войдут в неё только первые 8:

s8 := 'Hello, WORLD!!!';

WriteLn(s8); //Выведет Hello, W

Кроме того, вас ещё могут ждать проблемы с кодировкой. Потому что по умолчанию тип string имеет кодировку UTF8, а вот строка с ограничением длины - нет. Так что если вы запишите в неё русские буквы и попытаетесь вывести её в консоль, где используется Юникод, то будете неприятно удивлены:

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

WriteLn(s8[2]);

Этот код выведет в консоль второй символ строки s8.

Отдельные символы в строке можно не только читать, но и записывать. Точно так, как в случае с массивами:

s8[2] := ' ';

Здесь вместо второго символа мы записали пробел. Кстати, так делать нельзя, например, в Python и некоторых других языках, что для меня, как “коренного” паскалиста, очень и очень удивительно.

Разумеется, строки могут быть и константами:

const Hello = 'Hello, WORLD!!!';

На этом пока всё. Хотел написать коротенькую статью. Получилась не очень коротенькая, а я не рассказал и половины того, что можно рассказать о строках. Так что к этому вопросу я ещё вернусь. Подписывайтесь на канал, чтобы ничего не пропустить.