Удалить из строки все последовательности идущих подряд цифр, образующие числа большие 315 - PascalABC.NET
Формулировка задачи:
У меня есть программа, которая меняет цифру на следующую по порядку ( 9 меняет на 0 )
Подскажите, как удалить все последовательности идущих подряд цифр, образующие числа большие 315.
Допустим: 15gd300v2743g--->26gd300vg
Листинг программы
- Var Str: String;
- i: Integer;
- ch: Byte;
- Begin
- Write('Введите исходную строку: ');
- ReadLn(Str);
- for i := 1 to Length(Str) do
- if Str[i] in ['0'..'9'] { Проверяем каждый символ: это цифра? }
- then begin
- { Из кода символа вычитаем код '0', прибавляем единицу
- и вычисляем остаток от деления на 10 }
- ch := (Ord(Str[i]) - Ord('0') + 1) mod 10;
- { Возвращаем результат в символьный тип. Для этого прибавляем
- код нуля, чтобы цифры отображались корректно. }
- Str[i] := Chr(ch + Ord('0'));
- end;
- WriteLn('Обработанная строка: ', Str);
- ReadLn;
- End.
Решение задачи: «Удалить из строки все последовательности идущих подряд цифр, образующие числа большие 315»
textual
Листинг программы
- function f(m : Match) : string;
- begin
- result := StrToInt(m.Value) > 315 ? '' :
- new string(m.Value.ToCharArray().Select(ch -> ch in ['0' .. '8'] ? Succ(ch) : '0').ToArray())
- end;
- begin
- var s : string := '19gd300v2743g';
- writeln(Regex.Replace(s, '(\d+)', f));
- end.
Объяснение кода листинга программы
- Объявлена функция
f
с типом возвращаемого значенияstring
. - В функции используется анонимная функция-предикат для проверки условия
StrToInt(m.Value) > 315
. - Результатом функции
f
является пустая строка''
, если условие истинно, иначе — новая строка, полученная с помощью функцииnew string(...)
. - В основной части кода определена переменная
s
со значением'19gd300v2743g'
. - В строку
s
вставляется результат вызова функцииRegex.Replace
, в качестве первого аргумента которой используется строка'(\d+)'
, а вторым аргументом — функцияf
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д