【问题标题】:Simple numerical expression solver简单的数值表达式求解器
【发布时间】:2012-06-22 19:31:08
【问题描述】:

首先,对不起我的英语不好。

对于我的算法和数据结构类的最后一个项目,我需要在 C++ 中创建一个简单的数值表达式求解器。它需要解决像3*12+(4-6) 这样的简单表达式。我设法拆分表达式并将运算符与数字分开,但我不能再进一步了。诀窍是将运算符放在二叉树上,但我还没有做到。

程序只需要使用默认的 C++ 库。也许有一些我可以构建的基本实现?

提前致谢。

【问题讨论】:

  • 使用堆栈从中缀转换为后缀表示法。然后计算后缀表达式。 cs.man.ac.uk/~pjj/cs212/fix.html
  • 欢迎来到 Stack Overflow!你的英语看起来不错,别让这件事困扰你。但是,您的帖子缺少一个关键要素:一个问题。 StackOverflow 是一个问答网站。你有问题吗?
  • @Robᵩ倒数第二个句子是一个问题...
  • @Astor:“提前致谢”是最后一句话:D
  • @Robᵩ 谢谢!我只是要求一个参考实现,这样我就可以构建我的代码。我仍然对这个评论系统有点困惑,如果我犯了任何错误,请见谅。

标签: c++ data-structures binary-tree


【解决方案1】:

暂时忘记二叉树。

您需要将表达式转换为reverse polish notation。在转换过程中,您正在构建一棵二叉树!

[逆波兰表示法][2]

【讨论】:

  • 正如 VanDarg 上面所说,似乎这是最好的解决方案。无论如何,我会尝试对所有内容进行后缀,看看我得到了什么。非常感谢!
【解决方案2】:

看看这个http://www.codeproject.com/KB/recipes/rwformulaparser.aspx我想这个项目会解决你的问题 何塞米

【讨论】:

    【解决方案3】:

    你会想把它转换成逆波兰符号,转换的算法有点复杂,但是很多网站都详细说明了具体的步骤。做多位数字会使它变得更复杂一些。

    您需要知道的最重要的事情是,对于 RPN,您必须使用堆栈,而不是二叉树。等式切换到 RPN 后,您会将其数字清空到堆栈中,直到遇到运算符,然后您将从堆栈中取出前两个数字并对它们进行运算并将最终值放回堆栈中.最后,您将在堆栈上留下一个数字,这将是您等式的答案。

    【讨论】:

      猜你喜欢
      • 2015-08-02
      • 1970-01-01
      • 2016-04-07
      • 1970-01-01
      • 2016-01-01
      • 2011-04-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多