Delphi. Урок 13. Работа со строками

AngelOfLove

Exploit Developer
Joined
Feb 21, 2017
Messages
452
Reaction score
76
В этом уроке мы более подробно разберем различные методы работы со строками. Научимся производить простые операции копирования, поиска, вставки и т.п.

Теперь давайте рассмотрим несколько функций работы непосредственно с самими строками.

Сложение строк (операция конкатенации)
Сложение строк реализуется практически как и сложение обыкновенных чисел следующим образом:

1 var
2 a,b,c:string;
3 begin
4 b := 'zhk.su';
5 c := ' is a best website';
6 a := b + c;
7 // в результате строка a будет выглядеть так: "zhk.su is a best website"
8 end;

Получение длины строки
Получение длины строки в Delphi реализуется при помощи функции Length, которая возвращает в качестве результата целочисленное число.

1 var
2 a:string;
3 count:integer;
4 begin
5 a := 'zhk.su';
6 count := Length(a);
7 // в результате переменная count будет равна 6
8 end;

Строка как массив
В любой строке можно получать доступ к каждому ее символу. Таким образом, можно рассматривать строку как одномерный массив символов, т.е. можно обращаться к каждому символу по его индексу. Важно учесть, что индексы в строках типа String нумеруются не с 0, а c 1, т.е. индекс первого символа равен 1, а индекс последнего символа равен Length(s) (длине этой строки).

1 var
2 a, b:string;
3 c: char;
4 begin
5 a := 'zhk.su';
6 b := a[3]; // символ 'b'
7 c := a[3]; // можно использовать тип Char, который хранит в себе не более 1 символа
8 c := a[length(a)]; // получение последнего символа 'u'
9 end;

Преобразование строки к нижнему и верхнему регистру
1 var
2 a, b:string;
3 begin
4 a := 'zhk.su';
5 b := LowerCase(a); // строка b будет равна 'zhk.su'
6 b := UpperCase(a); // строка b будет равна 'zhk.su'
7 end;

Поиск в строке
Для поиска позиции определенной подстроки в строке используется функция Pos, возвращающая в результате своего вхождения начальный индекс этого вхождения в строке. Этой функции необходимо передать два параметра: подстроку, которую ищем, и строку, в которой производим поиск. Рассмотрим простой пример.

1 var
2 a, b:string;
3 с: integer;
4 begin
5 a := 'zhk.su is the best website about programming';
6 b := 'website';
7 c := pos(b, a); // c = 23
8 end;

Также существует еще одна аналогия функции pos, но имеющая немного больше возможностей — PosEx. Она позволяет производить поиск подстроки начиная с определенного индекса в строке. Но для работы с этой функцией необходимо добавить в раздел uses модуль StrUtils.

1 var
2 a, b:string;
3 с: integer;
4 begin
5 a := '123abc123123123';
6 b := '123';
7 c := PosEx(b, a, 4); // c = 7
8 end;

Как видите, преимущество PosEx заключается в том, что при поиске можно игнорировать определенные вхождения до указанного индекса. Это бывает очень удобно.

Вставка одной строки внутрь другой
Функция Insert позволяет вставить подстроку внутрь исходной строки, начиная с указанного индекса. При этом вставка происходит со сдвигом последующих символов вправо на длину вставляемой подстроки.

1 var
2 a, b:string;
3 begin
4 a := 'zhk.su is the website about programming';
5 b := 'best ';
6 Insert(a, b, 13); // a = "zhk.su is the best website about programming"
7 end;

Удаление подстроки из строки
Процедура Delete позволяет удалить из строки указанное количество символов, начиная с указанного индекса в строке. При этом удаление происходит со сдвигом последующих символов на длину удаляемой подстроки влево.

1 var
2 a:string;
3 begin
4 a := '123123abc123123';
5 Delete(a, 7, 3); // a = "123123123123"
6 end;

Копирование подстроки из строки
Функция Copy позволяет получить дубликат подстроки определенной длинны, начинающейся с символа с указанным индексом.

1 var
2 a, b:string;
3 begin
4 a := 'zhk.su is the best website about programming';
5 b := Copy(a, 1, 9); // b = "zhk.su"
6 end;

Замена одной подстроки на другую подстроку внутри строки
Для замены одной подстроки на другую подстроку внутри исходной строки используют функцию StringReplace. Нужно признать, что функция довольно удобная и обойти стороной ее никак нельзя. Довольно полезной возможностью этой функции является то, что она может заменять сразу несколько вхождений одной подстроки на другую, а также может игнорировать регистр. Последние две возможности являются опциональными (необязательными) и при необходимости их можно не использовать. Рассмотрим пример:

1 var
2 a, b, c: string;
3 begin
4 a := 'aBc Abc abC 123 cba cba cba'; // исходная строка
5 b := 'abc'; // заменяемая подстрока
6 c := 'test'; // заменяющая подстрока
7 // Далее параметр [rfReplaceAll,rfIgnoreCase] обозначают как раз те самые опции в работе функции.
8 // Называются такие параметры "флагами".
9 // Такие флаги обязательно нужно указывать внутри квадратных скобок.
10 // Сами флаги перечисляются через запятую.
11 // Все флаги, находящиеся внутри квадратных скобок являются обычным параметром функции.
12 // Флаг rfReplaceAll говорит функции, что нужно будет производить замену всех вхождений.
13 // Если этот флаг убрать (тогда выглядеть флаги будут так "[rfIgnoreCase]"),
14 // то заменится только первое вхождение в строке a.
15 // Флаг rfIgnoreCase указывает, что при поиске вхождений строк b регистр учитываться не будет.
16 // Если все флаги вам не нужны, то это НЕ значит, что параметр вовсе не нужно указывать.
17 // В таком случае укажите в качестве флагов "[]".
18 a := StringReplace(a,b,c, [rfReplaceAll,rfIgnoreCase]);
19 // В результате строка a будет содержать "test test test 123 cba cba cba"
20 end;
 

gogo

New member
Joined
Jun 21, 2004
Messages
4
Reaction score
0
I know this one, it's a Delphi tutorial for Russian speakers. I've taken a look at the previous lessons and this one seems to be covering string manipulation, which is pretty basic but useful to know. Does anyone have some example code they've written using this lesson?
 
Top