我目前正在写一个罗马数字转换器来取乐。该问题适用于上述字符优先级。
由于罗马数字不是位置数字,即 III 不表示 1*whatever base^2 + 1*whatever base^1 + 1*whatever base^0。
当有人输入 XIV 时,这当然会变得很困难,我需要确保在这种情况下不添加 I,而是减去。我不知道该怎么做。解决这个问题的最佳方法是什么?
我将罗马符号及其各自的十进制数字都存储在数组中:
const char cRomanArray[] = "IVXLCDM";
const int romanArray[] = { 1, 5, 10, 50, 100, 500, 1000 };
所以通过简单地检查数组中的优先级,即如果符号小于下一个符号,即在示例“XIV”中,如果“I”更小,我就不会太难暴力破解该死的东西比'V',在这种情况下,这是因为我已将它们排序在数组中,然后我可以让它减去值而不是加法。
但这似乎是一个非常丑陋的解决方案。有没有更好的?我在想一些类似于正则表达式的东西(如果这听起来像一个可怕的想法,请原谅我,我还没有使用过 RegExp,但听起来它可以满足我的需要,那就是确定字符串中的字符.)