我正在從一個程序轉換到羅馬到十進制。我必須驗證兩件事:一種是輸入的字符是M或D或C或L或X或V或I,換句話說對處理有效。C++羅馬添加形式轉換
。第二,我必須確保更大的字符值先走了,如果沒有打印和錯誤信息,並讓用戶再次嘗試(這是我堅持的部分)
例如,如果我想輸入9並輸入IX,它應該顯示一條錯誤消息,因爲它不在Additive form中。它應該是VIIII。我該如何編碼,以便比較字符以便知道較大的字母值是否在第一位等等?
我一直得到不正確的驗證。
有沒有辦法給字符串中的字母賦值?我想在比較他們作爲int值,我知道如何和從那裏驗證輸入格式。
void RomanNum::setRomanNumber() //get input and calculate decimal equivalent
{
//I 1, V 5, X 10, L 50, C 100, D 500, M 1000
int value = 0;
string input;
char current, next;
enum validationData { M, D, C, L, X, V, I };
bool validationCharacters = true;
//bool validationAdditiveForm = true;
getline(cin, input, '\n');
for (int i = 0; i < input.length(); i++) //calculate each Roman letter at a time
{
current = input[i];
next = current + 1;
if (current >= validationData(next))
{
switch (input[i])
{
case 'M':
value += 1000;
break;
case 'D':
value += 500;
break;
case 'C':
value += 100;
break;
case 'L':
value += 50;
break;
case 'X':
value += 10;
break;
case 'V':
value += 5;
break;
case 'I':
value += 1;
break;
default:
validationCharacters = false;
break;
}
}
else
{
cout << "\nInvalid order. Bigger values go first\n";
}
}
}
不要忘了IX或IV是有效的羅馬數字。祝你好運! – Docteur
是的,但我的老師希望它在後代的順序。多數民衆贊成在這裏@Docteur Docteur – Meeeeee
正如Docteur所說:「祝你好運」。你需要嘗試自己想出一個解決方案。如果你的想法有問題,請到這裏來問問。如果你想知道哪一個最優雅,請在codereview姐妹網站上提問。 – stefan