2017-04-05 91 views
-3

假设一个数学表达式以任意数量的分区/给出。字符串中的分隔符Java

例如:

(x+2)/(1+ 1/(x-2)) 

我怎样才能在表达输出每个公约?对于上述示例的输出必须是:

1+1/(x-2) 
x-2 

因为有一个除以1+1/(x-2),而这又包含一个除以x-2

我只得到第一个除数,也就是第一个/后面的整个exprss。我如何获得所有除数?

编辑:他要求的是得到表达式中的所有除数。

+0

到目前为止您尝试了什么? –

+0

你可以鄙视“将会有所有分隔符”的行吗? –

+0

你可以编辑你的问题一些更清晰的 – Hema

回答

1

除法是a/b形式的表达式,其中a和b本身可以是数字,变量或表达式。 a是“分红”,b是“除数”。您想要输出表达式中的每个除数。

这个关键是要认识到表达式实际上是一个二叉树结构。树的节点是符号,它们组合了两个子表达式。叶子(没有后代的节点)是变量或数字。下面是你的表达的例子:

expression tree

顶部操作是去年发生的划分。左边是x + 2,它由两个叶节点(x和2)和+操作组成。右边是子表达式(1 + 1 /(x-2))。请注意,最后一部分是棘手的。如果你只是从左到右看操作符,你可能会误解为(1 + 1)/(x - 2)。但它确实是1 +(1 /(x-2)),因为你需要考虑运算符的优先级。

你需要做的是创建一个解析器,在内存中构建树,考虑到括号和运算符的优先级。如果你想要所有的除数,你可以通过树中的每个节点,如果它是一个分区节点,你要求表达其右侧的孩子。必须重新填入圆括号,或者可以在解析过程中缓存部分字符串,并将这些部分链接到节点。

这不是一个提供现成的代码的答案,但正如评论中所述,Stack Overflow不是那个地方。如果问一个非常具体的问题,可能会提供代码,但对于这样的更大的问题,我们更愿意解释“如何”,并将实际实施留给您。无论如何,这是你的工作,家庭作业或爱好。