0 / 0 / 0
Регистрация: 27.01.2020
Сообщений: 1
|
|
1 | |
Замена римских букв на арабские цифры в строке27.01.2020, 21:56. Просмотров 2314. Ответов 5
Напишите программу, которая заменяет в переданной её символьной строке все записанные в римской системе счисления, на те же числа, записанные арабскими цифрами.
Входные данные Входная строка содержит текст, содержащий (возможно) запись чисел в римской системе счисления. Выходные данные Нужно заменить во всей строке числа, записанные в римской системе счисления, на те же числа, записанные арабскими цифрами. Примеры входные данные: In MMXIV Vasya graduated from school. выходные данные: In 2014 Vasya graduated from school.
0
|
|
27.01.2020, 21:56 | |
Перевод римских чисел в арабские Из римских чисел в арабские в файле Перевод римских цифр в арабские Перевод римских чисел в арабские и наоборот |
|
Мозгоправ
|
|||||||||||
31.01.2020, 00:53 | 3 | ||||||||||
Verevkin, там, куда вы послали ТС читать, решение сильно с гнильцой. Что бы далеко не ходить, делаю копипасту сюда обоих вариантов:
Вариант 1
if (integer_of(s[i]) <= integer_of(s[i])) , условие будет всегда истинным. Если же, подглядывая в вариант 2, докорректировать до if (integer_of(s[i + 1]) <= integer_of(s[i])) , то UB - см. ниже вариант 2.В варианте 2 выход за границу строки (UB) при анализе последнего символа: s[i + 1] . Код работает только потому, что в конкретной реализации std::string обращение элементу строки s[s.length()] возвращает концевой '\0', а не, допустим, вызывает исключение std::out_of_range .Далее, цитирую: best way to store the table to convert roman numerals to their corresponding integer values is by using a hash map. Ок, не вопрос. Но если этот map - просто справочная таблица, то надо добавить квалификаторы static const . Но, как говорится, фигвам - это жилище такое у индейцев. Сия таблица активно изменяется при вызовах std::map::operator[]() . В мапу в качестве ключей добавляются все буквы (без дублирования), имеющиеся в строке (кроме тех, которые указаны при инициализации), включая символ '\0', со значением значения 0. Опять-таки спасает ситуацию то, что std::map добавляет ключ со значением по умолчанию 0.Другими нежелательными эффектами является выделение памяти для хранения совершенно ненужных пар ключ-значение и некоторое увеличение времени поиска ключей. Т.е. надо было использовать метод std::map::find() .Наконец, hash map, см. цитату выше, это std::unordered_map , а std::map - это бинарное дерево.Ну и уж совсем напоследок, параметр в romanToInt() лучше передавать как константную ссылку. Это, извините, сейчас знают дети в старшей группе детсада.Добавлено через 18 минут SSDsssdd, кроме того, эти "решения" работают со всей строкой. Т.е. если функции romanToInt() напрямую скормить строку "In MMXIV Vasya graduated from school.", то функция вернёт число 2020.Следовательно, для решения вашей задачи необходимо входную строку разбивать на части, каждую часть проверять, что она является числом, записанным римскими цифрами, а потом уже скармливать функции. Кстати, алгоритм, реализованный в romanToInt() , трактует римскую запись числа несколько шире, чем это принято. Например, IIIIIIII это 8, и IIIIIV тоже 8.
0
|
Продавец времени
4752 / 2581 / 585
Регистрация: 12.03.2015
Сообщений: 12,562
|
||||||
31.01.2020, 08:30 | 4 | |||||
Критикуешь - предлагай свой вариант.
Вот функция на pascal. Можно и по ней запилить:
0
|
случайный прохожий
1497 / 986 / 372
Регистрация: 20.07.2013
Сообщений: 2,869
|
||||||
31.01.2020, 10:04 | 5 | |||||
Перевести римские числа в арабские, и наоборот
0
|
Мозгоправ
|
||||||
01.02.2020, 01:27 | 6 | |||||
Свой вариант потребовал некоторых изысканий. Поскольку те решения, которые выдаёт Гугл на первой странице, либо гнилые, либо работают некорректно. Даже статья в Википедии неточна: в соответствии с ней корректными числами будут IVI или XLXIVI, что очевидно неправильно. Кстати онлайн-конверторы тоже грешат некорректной работой.
В итоге родился следующий код:
![]()
0
|
01.02.2020, 01:27 | |
Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.
Замена букв на цифры! Замена букв в строке на сочетание букв Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |