Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка_Delphi_Ч1.doc
Скачиваний:
7
Добавлен:
02.11.2018
Размер:
2.38 Mб
Скачать
      1. Строки символов

Строка – это тип данных, которому соответствует последовательность символов. При работе со строками оперируют понятиями имя строки, размер строки, символ, номер символа. Для идентификации положения отдельных символов строки, используют индексы. В качестве индексов строки в Object Pascal могут использоваться только целые числа. Нумерация символов в строке начинается с единицы.

В языке Object Pascal существует несколько разновидностей строк, но мы рассмотрим только один из них, аналогичный типу String в языке Pascal. Этот тип в языке Object Pascal имеет название ShortString - короткая строка. Вместо него можно использовать и название String, но следует иметь в виду, что оно будет соответствовать типу ShortString только в том случае, если включена директива компилятора {$H+}. В противном случае String интерпретируется компилятором как тип AnsiString - длинная строка. Но, если в объявлении типа после ключевого слова String в квадратных скобках следует число, определяющее максимальную длину строки (например, String[4]), то, независимо от директив компилятора, тип трактуется как короткая строка.

Данные типа ShortString представляют собой последовательности 8-битовых ANSI символов, количество которых может быть от 0 до 255. Длина строки в процессе работы программы может изменяться, но размер выделяемой памяти при этом не меняется и равен 256 байтов.

Начальный (нулевой) байт в выделенной памяти используется для хранения длины строки, в остальных хранятся символы строки. Если S – это строка типа ShortString, то Ord(S[0]), так же как и Length(S), возвращают длину строки.

Object Pascal поддерживает и подтипы типа ShortString, максимальная длина которых может быть меньше чем 255 символов. Требуемая максимальная длина строки задается в квадратных скобках после слова String. Например:

var MyString: String[10];

Эта запись равносильна такой:

type

Tstring10 = String[10];

var MyString: Tstring10;

Использование подтипов экономит память, так как для строки выделяется меньше места.

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

Объявление типа со спецификатором длины нельзя использовать в заголовках процедур, которые используют параметры такого типа. Ниже приведен пример объявления процедуры, которое приведет к появлению сообщения об ошибке компиляции.

procedure Check(S: string[20] ); // будет синтаксическая ошибка

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

type

TString20 = String[20];

procedure Check(S: TString20);

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

Сцепление (конкатенация) строк осуществляется операцией "+". Например, выражение S1+S2 даст в результате новую строку, в которой после символов строки S1 будут расположены символы строки S2.

Для строк определены операции сравнения >, >=, <, <=, =, <>. Большей считается строка, у которой код первого из не совпавших символов больше. Обратите внимание, оценивается не длина строки, а коды символов. Именно на основе такого способа сравнения упорядочены слова в словарях.

В программах можно обращаться и к отдельным символам строки. Например, S[i] - это символ, расположенный в позиции i строки (индексы отсчитываются от 1, т.е. индекс 1 соответствует первому символу). Выражение S[i] возвращает значение типа Char.

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

Пусть мы хотим создать строку, состоящую из 15 случайных символов ‘0’ и ‘1’. На первый взгляд может показаться, что процедура, приведенная ниже, даст правильный результат, однако это не так. Фактическая длина строки в этой процедуре равна 0, и такой же она останется после завершения цикла.

procedure TForm1.Button1Click(Sender: TObject);

var s: String[20]; i: integer;

begin

for i:=1 to 15 do s[i] := intToStr(random(2))[1];

edit1.Text:=s;

end;

Желаемый результат мы получим при таком варианте:

procedure TForm1.Button1Click(Sender: TObject);

var s: String[20]; i: integer;

begin

s:='';

for i:=1 to 20 do s := s+intToStr(random(2));

edit1.Text:=s;

end;

      1. Некоторые стандартные процедуры и функции для обработки строк

Функция Length

Объявление функции:

function Length (s : String): Integer;

Функция возвращает число символов в строке S, которая передана функции в качестве параметра.

Например, выражение Length(‘Десна’) вернет значение 5.

Функция AnsiUpperCase

Объявления функций:

function AnsiUpperCase (const s : String): String

Функция возвращает новую строку, полученную из s, путем преобразования символов букв к верхнему регистру. Функция AnsiUpperCase применима для латинских и русских текстов.

Например, выражение AnsiUpperCase(‘Десна’) вернет значение ‘ДЕСНА’.

Для использования функции следует подключить модуль SysUtils.

Функция AnsiLowerCase

Объявления функций:

function AnsiLowerCase (const s : String): String

Функция возвращает новую строку, полученную из S, путем преобразования символов букв к нижнему регистру. Функция AnsiLowerCase применима для латинских и русских текстов.

Например, выражение AnsiLowerCase(‘Десна’) вернет значение ‘десна’.

Для использования функции следует подключить модуль SysUtils.

Функция AnsiCompareText

Объявление функции:

function AnsiCompareText (const s1, s2: string): Integer;

Функция сравнивает две строки ANSI s1 и s2 без учета регистра. Возвращает значение < 0, если s1 < s2, 0, если s1 = s2, и > 0, если s1 > s2.

Функция Copy

Объявление функции:

function Copy (s : String; index, count : Integer): String;

Функция возвращает подстроку строки s, начинающуюся с позиции index и содержащую до count символов.

Если index выходит за пределы строки – возвращается пустая строка.

Если count определяет больше символов, чем возможно, возвращается максимально возможное число символов.

Например, выражение Сopy(‘Десна – прекрасная река’, 12, 7) вернет значение ‘красная’.