- •Строковые переменные
- •Строки в формате Unicode
- •Короткие строки
- •Операции над строками
- •Строковые ресурсы
- •Форматы кодирования символов
- •Стандартные процедуры и функции для работы со строками
- •Insert(Source: string; var s: string, Index: Integer) — вставляет строку Source в строку s, начиная с позиции Index.
- •Задание:
Лабораторная работа №4
Теоретическая часть
ПО МАТЕРИАЛАМ: http://www.rsdn.ru/?summary/3165.xml
По ссылке предоставлены более полные материалы. Настоятельно рекомендуется изучение в соответствии с темой занятия.
Строки
Строковые значения
Строка — это последовательность символов. При программировании строковые значения заключаются в апострофы, например:
Writeln('Я тебя люблю'); |
Так как апостроф является служебным символом, для его записи в строке как значащего символа применяются два апострофа, следующих непосредственно друг за другом:
Writeln('Object Pascal is Delphi''s and Kylix''s language'); |
Для записи отсутствующих на клавиатуре символов используется символ #, за которым следует десятичный номер символа в кодовой таблице ASCII, например:
Writeln('Copyright '#169' А.Вальвачев, К.Сурков, Д.Сурков, Ю.Четырько'); |
Строка, которая не содержит символов, называется пустой:
Writeln(''); |
Теперь, когда известно, что представляют собой строковые значения, займемся строковыми переменными.
Строковые переменные
Строковая переменная объявляется с помощью зарезервированного слова string или с помощью идентификатора типа данных AnsiString, например:
Var FileName: string; EditText: AnsiString; |
Строку можно считать бесконечной, хотя на самом деле ее длина ограничена 2 ГБ. В зависимости от присваиваемого значения строка увеличивается и сокращается динамически. Это удобство обеспечивается тем, что физически строковая переменная хранит не сами символы, а адрес символов строки в области динамически распределяемой памяти (о динамически распределяемой памяти мы расскажем ниже). При создании строки всегда инициализируются пустым значением (''). Управление динамической памятью при операциях со строками выполняется автоматически с помощью стандартных библиотек языка Delphi.
Вы конечно же можете описывать строковые типы данных и использовать их при объявлении переменных и типизированных констант, например:
type TName = string; var Name: TName; const FriendName: TName = 'Alexander'; |
Символы строки индексируются от 1 до N+1, где N — реальная длина строки. Символ с индексом N+1 всегда равен нулю (#0). Для получения длины следует использовать функцию Length, а для изменения длины — процедуру SetLength (см. ниже).
Для того чтобы в программе обратиться к отдельному символу строки, нужно сразу за идентификатором строковой переменной или константы в квадратных скобках записать его номер. Например, FriendName[1] возвращает значение ‘A’, а FriendName[4] — ‘x’. Символы, получаемые в результате индексирования строки, принадлежат типу Char.
Достоинство строки языка Delphi состоит в том, что она объединяет в себе свойства строки самого языка Delphi и строки языка C. Оперируя строкой, вы оперируете значением строки, а не адресом в оперативной памяти. В то же время строка не ограничена по длине и может передаваться вместо C-строки (как адрес первого символа строки) в параметрах процедур и функций. Чтобы компилятор позволил это сделать, нужно, записывая строку в качестве параметра, преобразовать ее к типу PChar (тип данных, используемый в языке Delphi для описания нуль-терминированных строк языка C). Такое приведение типа допустимо по той причине, что строка всегда завершается нулевым символом (#0), который хоть и не является ее частью, тем не менее всегда дописывается сразу за последним символом строки. В результате формат строки удовлетворяет формату C-строки. О работе с нуль-терминированными строками мы поговорим чуть позже.
Строки в формате Unicode
Для поддержки работы со строками формата Unicode в язык Delphi имеется строковый тип данных WideString. Работа со строками типа WideString почти не отличается от работы со строками типа AnsiString; существуют лишь два отличия.
Первое отличие состоит в представлении символов. В строках типа WideString каждый символ кодируется не одним байтом, а двумя. Соответственно элементы строки WideString — это символы типа WideChar, тогда как элементы строки AnsiString — это символы типа AnsiChar.
Второе отличие состоит в том, что происходит при присваивании строковых переменных. Об этом вы узнаете чуть позже, прочитав параграф "Представление строк в памяти".