2012-01-13 51 views
0

我知道有很多关于解析数学表达式的问题。我研究并学习了将中缀字符串转换为后缀的算法,并使用后缀字符串来计算表达式的值。当操作数包含多个字符时解析表达式?

但是我发现的所有例子都只处理表达式的操作数仅包含一个字符的情况。例如“1 + 2”。

如果表达式为“1 + 123”,该怎么办?后缀字符串将变成“1123+”,因此无法进行评估。

我想过的方法是从中缀字符串中读取操作数的每个字符,并暂时将它们保存在tempStack中。并且,读取操作符时,将tempStack中的操作数转换为整数,然后将其推入后缀数组中。

但是接下来的问题是,我的操作数是整型,但我的操作符是字符类型。所以我不能把它们放在同一个阵列中。

请为我提供正确的方法。我知道有API来完成这项工作,但我想学习这些以加强我的知识。

非常感谢。

+0

你在找什么是[运算符优先解析器](http://en.wikipedia.org/wiki/Operator-precedence_parser)。或者使用两个堆栈,一个用于操作数,另一个用于操作员。 – 2012-01-13 12:50:18

回答

0

除非用空格分隔标记,否则不要将输入转换为“后缀字符串”。输入“1 + 123”然后将变成例如“1 123+”。但是最好将一个令牌放在堆栈上,例如一个字符串数组。如果您使用的语言支持代数数据类型,您可以创建一个Token类型并将其推入一堆Token

相关问题