我必須確保輸入的字母只包含M,D,C,L,X,V和I,我已經完成了。多輸入驗證約束? C++
我的問題是,他們是羅馬數字,而我也必須確保,如果一個較低值字符位於一個較高的值字符,它遵循羅馬數字的規則:
- 中號,D,C可以前面有一個字符2個點,所以
CM
或DM
沒關係,但LM
不是。 - L,X,V只能前面有一個字母,所以
XL
沒關係,但VL
不是。
的7個字母代表值如下:
╔════════╦═══════╗
║ Symbol ║ Value ║
╠════════╬═══════╣
║ I ║ 1 ║
║ V ║ 5 ║
║ X ║ 10 ║
║ L ║ 50 ║
║ C ║ 100 ║
║ D ║ 500 ║
║ M ║ 1,000 ║
╚════════╩═══════╝
這是我迄今:
void romanType::storeRoman()
{
locale loc;
bool valid = true;
do
{
valid = true;
cout << "please enter a roman numeral using no spaces:" << endl;
getline(cin, rNums);
for (i = 0; i < rNums.length(); ++i)
{
rNums[i] = toupper(rNums[i], loc);
if (rNums[i] == 'M' || rNums[i] == 'D' || rNums[i] == 'C' ||
rNums[i] == 'L' || rNums[i] == 'X' || rNums[i] == 'V' ||
rNums[i] == 'I')
{
continue;
}
valid = false;
}
cout << "input error please try again\n" << endl;
} while (!valid);
/* ... */
}
它的工作原理,只要所有的人物都是羅馬數字,但我不能爲我的生活弄清楚如何實現我提到的其他兩個約束。我編寫了程序的大部分內容,但我花了大概6-7個小時試圖讓這一部分工作。請幫忙。
請以某種方式讓您的代碼格式化,以供人們閱讀。完全隨機地格式化似乎是這裏所有者不理解的代碼的共同特徵。 – Collin
好吧,將定義的數字字符按照適當的順序放在數組中,然後匹配輸入字符並根據索引進行相對比較。 – OldProgrammer
這些是一些非常奇怪的要求,他們不會讓某些號碼無法轉移嗎? –