我必须确保输入的字母只包含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
这些是一些非常奇怪的要求,他们不会让某些号码无法转移吗? –