Напишите функцию, которая заменяет во всей строке все римские числа на соответствующие десятичные числа - PascalABC.NET
Формулировка задачи:
Пример:
Введите строку:
В MMXIII году в школе CXXIII состоялся очередной выпуск XI классов.
Результат:
В 2013 году в школе 123 состоялся очередной выпуск 10-х классов.
Решение задачи: «Напишите функцию, которая заменяет во всей строке все римские числа на соответствующие десятичные числа»
textual
Листинг программы
// ...
var s : string := 'В MMXIII году в школе CXXIII состоялся очередной выпуск XI классов.';
begin
s := Regex.Replace(s, '(?=[MDCLXVI])M*(C[MD]|D?C{0,3})(X[CL]|L?X{0,3})(I[XV]|V?I{0,3})',
(m : System.Text.RegularExpressions.Match) -> Rim2Arab(m.Value).ToString());
writeln(s);
end.
Объяснение кода листинга программы
- В строке
В MMXIII году в школе CXXIII состоялся очередной выпуск XI классов.нужно заменить все римские числа на десятичные. - Для этого используется метод Regex.Replace, который ищет все совпадения с заданным регулярным выражением и заменяет их на результат вызова функции Rim2Arab, преобразовывающей римское число в десятичное.
- Регулярное выражение '(?=[MDCLXVI])M*(C[MD]|D?C{0,3})(X[CL]|L?X{0,3})(I[XV]|V?I{0,3})' ищет все возможные варианты римских чисел.
Mозначает, что перед числом обязательно стоитM.C[MD]означает, что первая позиция может быть заполненаCилиM, а вторая позиция может быть заполненаD.D?C{0,3}означает, что вторая позиция может быть заполненаD, а третья, четвертая и пятая позиции могут быть заполненыC(но их может и не быть).X[CL]означает, что первая позиция может быть заполненаX, а вторая позиция может быть заполненаL.L?X{0,3}означает, что вторая позиция может быть заполненаL, а третья, четвертая и пятая позиции могут быть заполненыX(но их может и не быть).I[XV]означает, что первая позиция может быть заполненаI, а вторая позиция может быть заполненаVилиX.V?I{0,3}означает, что вторая позиция может быть заполненаV, а третья, четвертая и пятая позиции могут быть заполненыI(но их может и не быть).- Функция Rim2Arab преобразовывает римское число в десятичное.
- Результат преобразования (десятичное число) заменяет найденное римское число в исходной строке.
- Результат выводится на экран.