Я говорю “строки в 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!!!';
На этом пока всё. Хотел написать коротенькую статью. Получилась не очень коротенькая, а я не рассказал и половины того, что можно рассказать о строках. Так что к этому вопросу я ещё вернусь. Подписывайтесь на канал, чтобы ничего не пропустить.