Преобразование римских цифр в арабские числа

-7

Итак, у меня есть одна моя функция, работающая, но функции, чтобы проверить, содержит ли введенная пользователем строка только римские цифры (M, D, V, X, C, L, I) и преобразовать римские цифры в арабские цифры (1, 2,3,4 и т.д.) Не работают. Может кто-нибудь помочь?? Мне нужно отформатировать в C++.

Я проверил функцию romanValue, и она прекрасно работает, но мне нужно отредактировать функцию convertRomantoArabic, чтобы взять строку ввода, проверить ее с помощью функции romanValue и суммы значений римских цифр и отобразить общее значение на экране.

это вся моя программа:

   #include <iostream>
#include <string>
#include <cassert>
#include <cstddef>

using namespace std;

//This function searches in the string to see if the string only contains
//Roman Numeral values
//Pre:none
//Post:none
string isRoman(string roman){
for(const auto& c:roman){
if(!(c == 'M' || c == 'D' || c == 'C' ||
c == 'L' || c == 'X' || c == 'V' || c == 'I')){
cout<<"Not Roman";
}
cout<<"Is Roman";
}
}

//This Function finds the Roman Numeral and returns the value
//Pre: none
//Post: none
int romanValue(char roman){
switch(roman){
case'M':
return 1000;
case'D':
return 500;
case'C':
return 100;
case'L':
return 50;
case 'X':
return 10;
case'V':
return 5;
case'I':
return 1;
default:
cout<<"Not a Roman Value: "<<roman<<endl;
return 0;
}
}

//This Function Takes the Roman Numerals entered, finds their value, Adds up
//Adds up their value and then converts them to Arabic numbers.
//Pre: none
//Post: None
int convertRomantoArabic(string arabic){
int i,ans =0, p=0;
int n = arabic.length()-1;

for(i = n; i > 0;i--){
if(romanValue(arabic[i] >= p)){
ans = ans + romanValue(arabic[i]);
}
ans = ans - romanValue(arabic[i]);

p = romanValue(arabic[i]);
}
return ans;
}
int main()
{
string romanLet;
int getRomanValue;
cout<<"Please enter a Roman Numeral: ";
cin>>romanLet;

string findRoman = isRoman(romanLet);

cout<<findRoman;

//getRomanValue = convertRomantoArabic(romanLet);

//cout<<getRomanValue;
return 0;
}

спросил(а) 2018-11-07T18:05:00+03:00 1 год, 10 месяцев назад
0
114

Ваша логика в том виде, в котором она написана, недостаточна для правильного декодирования римской цифры. Как отмечалось ранее, IV - это 4, а не 6.

И десятисекундный поиск в Google приведет вас непосредственно к нескольким примерам кода, которые действительно работают. (Так что, если это не домашнее задание, "не делайте ничего уже сделанного. ™")

Если вы хотите разработать алгоритм для себя, позвольте мне дать вам подсказку: "запустите строку назад ", помня числовое значение предыдущего символа, который вы видели. "Если вы сталкиваетесь с буквой" I которая ранее сталкивалась с V при работе в обратном направлении, вы знаете, что..."

ответил(а) 2018-11-07T18:22:00+03:00 1 год, 10 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема