Здесь показаны различия между двумя версиями данной страницы.
| Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия | ||
|
subjects:programming:pascal:standard_functions [2023/04/25 16:05] ¶ [Функции и процедуры работы со строками] |
subjects:programming:pascal:standard_functions [2023/04/25 17:32] (текущий) ¶ [Пример замены] |
||
|---|---|---|---|
| Строка 58: | Строка 58: | ||
| Insert(s7,s6,3); //s6=’Рубашка’;</code>|| | Insert(s7,s6,3); //s6=’Рубашка’;</code>|| | ||
| - | ==== Замена ==== | ||
| - | |||
| - | Чтобы в Pascal заменить в строке одну подстроку на другую, применяют метод <code pascal>stringReplace (): stringReplace (original, old, new, flag)</code>: в строке originalString подстрока old заменяется на new, flag принимает одно из значений rfReplaceAll или rfIgnoreCase, записываемое в квадратных скобках. | ||
| ==== Пример замены ==== | ==== Пример замены ==== | ||
| - | <code pascal> | + | Можно самому написать функцию, которая бы заменяла подстроку в строе. Например, вот так: |
| - | i := pos(s_old,s); | + | <code pascal strReplace.pas> |
| - | delete(s,i,l_old); | + | function strReplaceOnce(s_txt, s_from, s_to :string): string; |
| - | insert(s_new,s,i); | + | var |
| + | i_pos, len_from:integer; | ||
| + | begin | ||
| + | i_pos := pos(s_from, s_txt); // Номер символа первого вхождения | ||
| + | len_from := Length(s_from); // Длинна строки для замены | ||
| + | if (i_pos > 0) and (len_from > 0) then begin | ||
| + | delete(s_txt, i_pos, len_from); // Удаляет строку | ||
| + | insert(s_to, s_txt, i_pos); // Вставляет нужную строку | ||
| + | end; | ||
| + | strReplaceOnce := s_txt; // Возвращает результат после всех действий | ||
| + | end; | ||
| + | |||
| + | function strReplaceAll(s_txt, s_from, s_to :string): string; | ||
| + | begin | ||
| + | while (pos(s_from, s_txt) > 0) do begin | ||
| + | s_txt := strReplaceOnce(s_txt, s_from, s_to); | ||
| + | end; | ||
| + | strReplaceAll := s_txt; | ||
| + | end; | ||
| + | |||
| + | begin | ||
| + | writeln(strReplaceOnce ('2-3 0123456789-23-23', '23', 'aaaB')); // 2-3 01aaaB456789-23-23 | ||
| + | writeln(strReplaceAll ('2-3 0123456789-23-23', '23', 'aaaB')); // 2-3 01aaaB456789-aaaB-aaaB | ||
| + | end. | ||
| </code> | </code> | ||
| - | - Функция <code pascal>pos(subs, s)</code> ищет вхождение подстроки subs в строке s и возвращает номер первого символа subs в s или нуль, если subs не содержится в s. | ||
| - | - Процедура <code pascal>delete(s, start, len)</code> удаляет из строки s, начиная с позиции start, подстроку длиной len. | ||
| - | - Процедура <code pascal>insert(subs, s, start)</code> вставляет в строку s подстроку subs, начиная с позиции start. | ||
| - | - Если в строке несколько одинаковых подстрок, которые требуется заменить на новую подстроку, то следует воспользоваться циклом | ||
| - | | ||
| ==== Преобразование типов ==== | ==== Преобразование типов ==== | ||
| |Функция|Описание|Пример|| | |Функция|Описание|Пример|| | ||
Записаться на занятия к репетитору