我目前正在为它的乐趣写一个罗马数字转换器。该问题符合前述的字符优先顺序。由于罗马数字不是位置的,即III不代表1 *任何基数^ 2 + 1 *任何基数^ 1 + 1 *任何基数^ 0。需要在字符串中格式化字符优先级
当然,当有人在XIV中键入内容时,我很难确定在这种情况下我没有被添加,而是被扣除。我不知道如何做到这一点。解决这个问题的最好方法是什么?
我都存储在阵列中的罗马符号和它们各自的十进制数:
const char cRomanArray[] = "IVXLCDM";
const int romanArray[] = { 1, 5, 10, 50, 100, 500, 1000 };
所以它不会太难,只需检查中的优先级对我来说,暴力破解这该死的东西数组,即如果符号小于下一个符号,即在'XIV'中如果'I'小于'V',在这种情况下,这是因为我已经在数组中排序它们,然后我可以使它会减去值而不是添加。
但这似乎是一个非常丑陋的解决方案。有没有更好的?我正在考虑沿着正则表达式的方向行事(原谅我,如果这听起来像一个可怕的想法,我还没有使用RegExp,但它听起来像它可以做我需要的东西,那就是确定字符串中的字符)
阅读I&V并将它们转换为1-9不适用于IX,是吗? – Gauthier 2010-04-03 08:43:41
糟糕,是的你是对的。我想你可以从右边读,直到它不符合模式,但我的第一个建议是迄今为止最简单的代码。 – 2010-04-03 09:11:50