gpt4 book ai didi

c++ - 需要格式化字符串中的字符优先级

转载 作者:太空狗 更新时间:2023-10-29 21:08:44 26 4
gpt4 key购买 nike

为了好玩,我目前正在编写一个罗马数字转换器。该问题适用于上述字符优先级。

由于罗马数字不是位置性的,即 III 不表示 1*无论底数^2 + 1*无论底数^1 + 1*无论底数^0。

当有人输入 XIV 时,这当然会变得很困难,我需要确保在这种情况下 I 没有被添加,而是被减去。我不知道该怎么做。解决这个问题的最佳方法是什么?

我将罗马符号及其各自的十进制数都存储在数组中:

const char cRomanArray[] = "IVXLCDM";
const int romanArray[] = { 1, 5, 10, 50, 100, 500, 1000 };

所以我不会太难通过简单地检查数组中的优先级来暴力破解该死的东西,即如果符号小于下一个符号,即在示例'XIV'中如果'我' 小于 'V',在这种情况下,这是因为我在数组中对它们进行了排序,然后我可以让它减去该值而不是添加。

但这似乎是一个非常丑陋的解决方案。也许有更好的吗?我在想一些与正则表达式类似的东西(如果这听起来很糟糕,请原谅我,我还没有使用 RegExp,但听起来它可以做我需要的,那就是确定字符串中的字符.)

最佳答案

从右边开始。向左移动,只要值增加(或保持不变)就加,当值减少时减。

例如为四十四

从V开始,加5。
移到I,少了,所以减1。
移到L,更大,加50。
移动到 X,它更少,所以减去 10。

你得到 44,这是正确的。


或者,您实际上可以将其视为以 10 为基数,除了将 1...9 与 I、II、III、IV...IX 交换以及将 10...90 与 X、XX、XXX、LX... .XL、L等。

读入I&V字符,将其转换为1-9,然后读入X&L字符,将其转换为10-90,依此类推。

关于c++ - 需要格式化字符串中的字符优先级,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2570640/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com