将罗马数字转换为阿拉伯数字

时间:2018-11-07 15:05:50

标签: c++ string switch-statement

所以我有一个函数在工作,但是要检查用户输入的字符串是否仅包含罗马数字(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;
}

1 个答案:

答案 0 :(得分:0)

您编写的逻辑不足以正确地解码罗马数字。如前所述,IV是4,而不是6。

而且,十秒钟的Google搜索 会直接带您找到一些有效的代码示例。 (因此,如果这不是家庭作业,则“不要做已经做的事情。™”)

如果您想自己计算算法,让我给您以下提示:“运行字符串向后,” 记住前一个字符的数值正如你所见。 “如果向后工作时遇到I之前曾遇到过V,则知道...”