所以我有一个函数在工作,但是要检查用户输入的字符串是否仅包含罗马数字(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;
}
答案 0 :(得分:0)
您编写的逻辑不足以正确地解码罗马数字。如前所述,IV
是4,而不是6。
而且,十秒钟的Google搜索 会直接带您找到一些有效的代码示例。 (因此,如果这不是家庭作业,则“不要做已经做的事情。™”)
如果您想自己计算算法,让我给您以下提示:“运行字符串向后,” 记住前一个字符的数值正如你所见。 “如果向后工作时遇到I
之前曾遇到过V
,则知道...”