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

A

AngelOfLove

Original poster
В этом уроке мы более подробно разберем различные методы работы со строками. Научимся производить простые операции копирования, поиска, вставки и т.п.

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

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

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;
 
Название темы
Автор Заголовок Раздел Ответы Дата
A Delphi. Урок 14. Работа со списками строк TStringList или «сложные» типы С/C++ 0
A Delphi для начинающих. Урок 10. Циклы. Работа с массивами С/C++ 0
A Delphi для начинающих – Урок 4 – Работа с переменными С/C++ 0
A Delphi. Урок 17. Типы С/C++ 0
A Delphi. Урок 16. Исключительные ситуации С/C++ 0
A Delphi. Урок 15. Математические операции С/C++ 0
A Delphi. Урок 12. Преобразование числа в строку и строки в число С/C++ 0
A Delphi для начинающих. Урок 11. Процедуры и функции С/C++ 0
A Delphi для начинающих – Урок 9 – Массивы С/C++ 0
A Delphi для начинающих – Урок 8 – Условия. Оператор Case С/C++ 0
A Delphi для начинающих – Урок 7 – Условия. Оператор IF С/C++ 0
A Delphi для начинающих – Урок 6 – Пишем свой калькулятор С/C++ 0
A Delphi для начинающих – Урок 5 – Работаем с компонентами С/C++ 0
A Delphi для начинающих – Урок 3 – Создание переменных С/C++ 0
A Delphi для начинающих – Урок 2 — События С/C++ 0
A Delphi для начинающих — Урок 1 — Среда разработки Delphi С/C++ 0
C Реверс-инжирниринг бота на Delphi, есть проблемы Вопросы и интересы 0
M [Delphi] Работа VKAPI, на примере бота С/C++ 3
T Пишем WinLocker на Delphi С/C++ 0
D Нужна помощь по Delphi! ЗАПЛАЧУ! Другие ЯП 1
VAVAN Продам исход стиллера (ЯП Delphi) Продажа софта 1
A Потоки в Delphi. TThread С/C++ 0
A Простые шутку в DELPHI С/C++ 5
A Мои старые исходники на Delphi С/C++ 1
A Несколько шпор по Delphi =) С/C++ 3
L Загружаем компьютер другу. Delphi,rad studio Другие ЯП 0
I Country IP Ranges Generator v1.0 [Source][Delphi] Другие ЯП 3
B Помощь [Delphi] Другие ЯП 0
B VK Post Grabber [Source][Delphi] Другие ЯП 0
Admin [delphi] downloader winapi Другие ЯП 0
Ж HTML/CSS, Урок 2 Другие ЯП 3
K Уроки по XSS: Урок 3. Контексты внедрения XSS Уязвимости и взлом 0
K Уроки по XSS: Урок 2. Скрытая передача данных, перехват нажатия клавиш, изменение внешнего вида сайта, подцепление на BeEF, фишинг, подсказки обхода ф Уязвимости и взлом 0
K Уроки по XSS: Урок 1. Основы XSS и поиск уязвимых к XSS сайтов Уязвимости и взлом 0
M Работа на выгодных условиях без особого труда. Предоставляю работу. Ищу специалиста. 0
M Работа для соискателей из РФ и РБ. Предоставляю работу. Ищу специалиста. 1
I Работа, разные рутинные задачи: постинг / переговоры / поиск Предоставляю работу. Ищу специалиста. 8
cheese Интересно Работа по РУ и СНГ Ищу работу. Предлагаю свои услуги. 1
L Работа Предоставляю работу. Ищу специалиста. 0
S Работа для всех Предоставляю работу. Ищу специалиста. 0
Dobermаnn Работа для дроповодов Предоставляю работу. Ищу специалиста. 0
F Работа для всех Предоставляю работу. Ищу специалиста. 0
C Набор в команду(Работа онлайн) Предоставляю работу. Ищу специалиста. 2
P Работа Корзина 2
K [Работа] - сотрудники Банков/гос.учреждений/сот.операторов Предоставляю работу. Ищу специалиста. 2
W Работа онлайн в команде Предоставляю работу. Ищу специалиста. 2
A Доброго времени суток! Разработаем сайт для сети onion/ зарегистрируем onion домен. Работа под ключ. Ищу работу. Предлагаю свои услуги. 1
M Набор сотрудников(Работа онлайн) Предоставляю работу. Ищу специалиста. 0
C Работа поиск форумов - Легально Предоставляю работу. Ищу специалиста. 2
K Работа онлайн в команде. Предоставляю работу. Ищу специалиста. 0

Название темы