我知道有很多关于解析数学表达式的问题。我研究并学习了将中缀字符串转换为后缀的算法,并使用后缀字符串来计算表达式的值。
但是我发现的所有例子都只涉及表达式的操作数只包含一个字符的情况。例如“1 + 2”。
如果表达式是“1 + 123”,你该怎么办?后缀字符串将变为“1123+”,因此无法对其进行评估。
我想到的方法是从中缀字符串中读取操作数的每个字符,并暂时将它们保存在tempStack中。并且,当读取运算符时,将tempStack中的操作数转换为整数,然后将其推入后缀数组。
然后问题出现了,我的操作数将是整数类型,但我的运算符是字符类型。所以我不能把它们放在同一个数组中。
请建议我这样做的正确方法。我知道有API可以完成这项工作,但我想学习这些来加强我的知识。
非常感谢。
答案 0 :(得分:0)
除非用空格分隔标记,否则不要将输入转换为'后缀字符串'。然后输入“1 + 123”将变为例如“1 123 +”。但最好将令牌推入堆栈,例如字符串数组。如果您使用的语言支持代数数据类型,则可以创建Token
类型并推送到Token
s的堆栈。