Работа со строковыми типами данных

Работа со строковыми типами данных

Строковый тип данных - один из самых часто используемых в программах тип. Действительно, без него не обходится практически ни один алгоритм. Даже программы, выполняющие исключительно математические операции, порой, написаны с использованием строковых типов данных.

Строка - это последовательность символов. В Object Pascal существует несколько строковых типов. Вот основные из них:

Для большинства целей подходит тип AnsiString (иногда называется Long String).

Стандартные функции обработки строк:

1) Функция Length(Str: String) - возвращает длину строки (количество символов). Пример:

var Str: String; L: Integer; < . > Str := 'Hello!' ; L := Length(Str);

2) Функция SetLength(Str: String; NewLength: Integer) позволяет изменить длину строки. Если строка содержала большее количество символов, чем задано в функции, то "лишние" символы обрезаются. Пример:

var Str: String; < . >Str := 'Hello, world!' ; SetLength(Str, 5);

3) Функция Pos(SubStr, Str: String) - возвращает позицию подстроки в строке. Нумерация символов начинается с единицы (1). В случае отсутствия подстроки в строке возращается 0. Пример:

var Str1, Str2: String; P: Integer; < . >Str1 := 'Hi! How do you do?' ; Str2 := 'do' ; P := Pos(Str2, Str1);

4) Функция Copy(Str: String; Start, Length: Integer) - возвращает часть строки Str, начиная с символа Start длиной Length. Ограничений на Length нет - если оно превышает количество символов от Start до конца строки, то строка будет скопирована до конца. Пример:

var Str1, Str2: String; < . >Str1 := 'This is a test for Copy() function.' ; Str2 := Copy(Str1, 11, 4);

5) Процедура Delete(Str: String; Start, Length: Integer) - удаляет из строки Str символы, начиная с позиции Start длиной Length. Пример:

var Str1: String; < . >Str1 := 'Hello, world!' ; Delete(Str1, 6, 7);

6) Процедура Insert(SubStr: String; Str: String; Pos: Integer) - вставляет в строку Str подстроку SubStr в позицию Pos. Пример:

var Str: String; < . > Str := 'Hello, world!' ; Insert( 'my ' ,Str, 8);

7) Функции UpperCase(Str: String) и LowerCase(Str: String) преобразуют строку соответственно в верхний и нижний регистры:

var Str1, Str2, Str3: String; < . >Str1 := 'hELLo' ; Str2 := UpperCase(Str1); < Str2 = "HELLO" >Str3 := LowerCase(Str1);

Строки можно сравнивать друг с другом стандартным способом:

var Str1, Str2, Str3: String; B1, B2: Boolean; < . >Str1 := '123' ; Str2 := '456' ; Str3 := '123' ; B1 := (Str1 = Str2); < B1 = False >B2 := (Str1 = Str3);

Если строки полностью идентичны, логическое выражение станет равным True.

Дополнительные функции обработки строк:

В модуле StrUtils.pas содержатся полезные функции для обработки строковых переменных. Чтобы подключить этот модуль к программе, нужно добавить его имя (StrUtils) в раздел Uses.

1) PosEx(SubStr, Str: String; Offset: Integer) - функция аналогична функции Pos(), но позволяет задать отступ от начала строки для поиска. Если значение Offset задано (оно не является обязательным), то поиск начинается с символа Offset в строке. Если Offset больше длины строки Str, то функция возратит 0. Также 0 возвращается, если подстрока не найдена в строке. Пример:

uses StrUtils; < . > var Str1, Str2: String; P1, P2: Integer; < . >Str1 := 'Hello! How do you do?' ; Str2 := 'do' ; P1 := PosEx(Str2, Str1, 1); < P1 = 12 >P2 := PosEx(Str2, Str1, 15);

2) Функция AnsiReplaceStr(Str, FromText, ToText: String) - производит замену выражения FromText на выражение ToText в строке Str. Поиск осуществляется с учётом регистра символов. Следует учитывать, что функция НЕ изменяет самой строки Str, а только возвращает строку с произведёнными заменами. Пример:

uses StrUtils; < . > var Str1, Str2, Str3, Str4: String; < . >Str1 := 'ABCabcAaBbCc' ; Str2 := 'abc' ; Str3 := '123' ; Str4 := AnsiReplaceStr(Str1, Str2, Str3);

3) Функция AnsiReplaceText(Str, FromText, ToText: String) - выполняет то же самое действие, что и AnsiReplaceStr(), но с одним исключением - замена производится без учёта регистра. Пример:

uses StrUtils; < . > var Str1, Str2, Str3, Str4: String; < . >Str1 := 'ABCabcAaBbCc' ; Str2 := 'abc' ; Str3 := '123' ; Str4 := AnsiReplaceText(Str1, Str2, Str3);

4) Функция DupeString(Str: String; Count: Integer) - возвращает строку, образовавшуюся из строки Str её копированием Count раз. Пример:

uses StrUtils; < . > var Str1, Str2: String; < . >Str1 := '123' ; Str2 := DupeString(Str1, 5);

5) Функции ReverseString(Str: String) и AnsiReverseString(Str: AnsiString) - инвертируют строку, т.е. располагают её символы в обратном порядке. Пример:

uses StrUtils; < . > var Str1: String; < . >Str1 := '0123456789' ; Str1 := ReverseString(Str1);

6) Функция IfThen(Value: Boolean; ATrue, AFalse: String) - возвращает строку ATrue, если Value = True и строку AFalse если Value = False. Параметр AFalse является необязательным - в случае его отсутствия возвращается пустая строка.

uses StrUtils; < . > var Str1, Str2: String; < . >Str1 := IfThen(True, 'Yes' ); < Str1 = "Yes" >Str2 := IfThen(False, 'Yes' , 'No' );

Мы рассмотрели функции, позволяющие выполнять со строками практически любые манипуляции. Как правило, вместо строки с указанным типом данных, можно использовать и другой тип - всё воспринимается одинаково. Но иногда требуются преобразования. Например, многие методы компонент требуют параметр типа PChar, получить который можно из обычного типа String функцией PChar(Str: String):

uses ShellAPI; < . > var FileName: String; < . >FileName := 'C:\WINDOWS\notepad.exe' ; ShellExecute(0, 'open' , PChar(FileName), '' , '' , SW_SHOWNORMAL);

Тип Char представляет собой один-единственный символ. Работать с ним можно как и со строковым типом. Для работы с символами также существует несколько функций:

Chr(Code: Byte) - возвращает символ с указанным кодом (по стандарту ASCII):

var A: Char; < . >A := Chr(69);

Ord(X: Ordinal) - возвращает код указанного символа, т.е. выполняет противоположное действие функции Chr():

var X: Integer; < . >X := Ord( 'F' );

Из строки можно получить любой её символ - следует рассматривать строку как массив. Например:

var Str, S: String; P: Char; < . >Str := 'Hello!' ; S := Str[2]; < S = "e" >P := Str[5];

В этой статье описаны основные приёмы работы со строковыми типами данных. Как правило, этих данных достаточно для написания любого алгоритма.

Статья добавлена: 18 февраля 2006

Зарегистрируйтесь/авторизируйтесь,чтобы оценивать статьи.

Статьи, похожие по тематике

Для вставки ссылки на данную статью на другом сайте используйте следующий HTML-код:

Ссылка для форумов (BBCode):

Быстрая вставка ссылки на статью в сообщениях на сайте: (буква a — латинская) — только адрес статьи (URL); — полноценная HTML-ссылка на статью (текст ссылки — название статьи).

Поделитесь ссылкой в социальных сетях:

Комментарии читателей к данной статье

Цитата (GolDrag):

Забыли про Insert Insert(Text, ToText: string; Pos: integer);

Процедура вставляет строку Text в строку ToText перед позицией Pos.

Target := '12345678'; Insert('-+-', Target, 3);

В результате: Target : 12-+-345678

Оставлять комментарии к статьям могут только зарегистрированные пользователи.

📎📎📎📎📎📎📎📎📎📎