罗马数字C ++编程转换问题

时间:2017-03-30 10:50:28

标签: c++

我目前正在开发一些用于将输入的整数转换为ROMAN数字的代码。除了我正在使用角色I的情况之外,它应该如何工作,它没有正确地添加它们。我使用了与其他字符相同的语法,因此我感到困惑的是为什么它对“I”字符不起作用。这是我所拥有的片段:

else if(roman_Numeral == 'V')
    {
        roman_Numeral = cin.peek();
        if(numerals.find(roman_Numeral, 2) != std::string::npos)
        {
            arabic_Numeral = arabic_Numeral - 5;
            continue;
        }
        else
        {
            arabic_Numeral = arabic_Numeral + 5;
            continue;
        }
    }

    else if(roman_Numeral == 'I')
    {
        roman_Numeral = cin.peek();
        if(numerals.find(roman_Numeral), 2 != std::string::npos)
        {
            arabic_Numeral = arabic_Numeral -1;
            break;
        }
        else
        {
            arabic_Numeral += 1 ;
            continue;
        }
    }
    else
        break;
}
cout << arabic_Numeral << endl;
return 0;

其他字符,例如M,C,D等在布局上是相似的,但是很明显,对于VI这样的东西,所需的输出是6,它输出4.任何帮助都将受到赞赏。

完整的代码是:

    #include <string>
#include <iostream>
using namespace std;

std::string numerals = "IVXLCDM";

int main()
{
char roman_Numeral;
int arabic_Numeral = 0;

cout << "Enter the Roman Numeral in Capital letters (e.g. CCXIX) : ";
while(cin.get(roman_Numeral))
{
    if(roman_Numeral == 'M')
        arabic_Numeral = arabic_Numeral + 1000;

    else if(roman_Numeral == 'D')
    {
        roman_Numeral = cin.peek();
        if(numerals.find(roman_Numeral, 5) != std::string::npos)
        {
            arabic_Numeral = arabic_Numeral - 500;
            continue;
        }
        else
        {
            arabic_Numeral = arabic_Numeral + 500;
            continue;
        }
    }

    else if(roman_Numeral == 'C')
    {
        roman_Numeral = cin.peek();
        if(numerals.find(roman_Numeral, 4) != std::string::npos)
        {
            arabic_Numeral = arabic_Numeral - 100;
            continue;
        }
        else
        {
            arabic_Numeral = arabic_Numeral + 100;
            continue;
        }
    }

    else if(roman_Numeral == 'L')
    {
        roman_Numeral = cin.peek();
        if(numerals.find(roman_Numeral, 3) != std::string::npos)
        {
            arabic_Numeral = arabic_Numeral - 50;
            continue;
        }
        else
        {
            arabic_Numeral = arabic_Numeral + 50;
            continue;
        }
    }

    else if(roman_Numeral == 'X')
    {
        roman_Numeral = cin.peek();
        if(numerals.find(roman_Numeral, 2) != std::string::npos)
        {
            arabic_Numeral = arabic_Numeral - 10;
            continue;
        }
        else
        {
            arabic_Numeral = arabic_Numeral + 10;
            continue;
        }
    }

    else if(roman_Numeral == 'V')
    {
        roman_Numeral = cin.peek();
        if(numerals.find(roman_Numeral, 2) != std::string::npos)
        {
            arabic_Numeral = arabic_Numeral - 5;
            continue;
        }
        else
        {
            arabic_Numeral = arabic_Numeral + 5;
            continue;
        }
    }




    else if(roman_Numeral == 'I')
    {
        roman_Numeral = cin.peek();
        if(numerals.find(roman_Numeral), 2 != std::string::npos)
        {
            arabic_Numeral = arabic_Numeral -1;
            break;
        }
        else
        {
            arabic_Numeral += 1 ;
            continue;
        }
    }
    else
        break;
}
cout << arabic_Numeral << endl;
return 0;
}

我最初在网上找到了代码,稍后会进行其他更改。目前我的代码的大部分测试组合都有效。它只是实现了我的所以我可以测试我的奇异案例,如III = 3,等.III目前输出-1,这显然是不正确的。我认为问题与它们将它们加在一起的方式有关,但并不完全确定。毕竟我对编码很新。

亲切的问候。

1 个答案:

答案 0 :(得分:0)

你的观察是正确的。代码确实有一个错误,我会&#39;我&#39;部分。只需仔细阅读代码并尝试将其与其他工作部分进行比较。 提示:缺少括号;)