我尝试制作一个代码来计算用户输入的公式的值。即,如果用户输入“10 + 5”,程序将打印“总和为15”等。首先,我认为这是一件容易的事,但如果意识到只使用scanf orsth就不会做。然后我乱搞数组和循环,看看循环是否在输入中遇到“ - ”或“+”符号,然后在“ - ”或“+”之前保存字符,然后再计算它,但我无法做到这一点工作要么。 能否请您指导我如何完成这项工作。 非常感谢你!
答案 0 :(得分:2)
您要做的是解析算术表达式,然后评估它们。互联网上有很多东西,所以,由于这是你的功课,我会把你留给谷歌。你首先想到的是,这很容易做到,这可能是一个天真的想法,但如果你不太快就太野心勃勃,这不是一个非常困难的问题。
答案 1 :(得分:2)
这可能非常复杂,尤其是当您获得运算符优先级并且需要正确计算时,例如2 + 5 * 6
,需要将其视为2 + (5 * 6)
。解决这个问题的正确方法是构造一个表达式树(就像编译器一样)。 e.g。
+
/ \
2 *
/ \
5 6
您可以通过创建二叉树来完成此操作。每个节点都有一个操作和(最多)两个子节点。然后通过遍历表达式树来评估表达式。
答案 2 :(得分:1)
这可能有点过头,但你可以做的是使用c语言引擎和词法分析器。
我相信它被称为“BISON”和“YYLEX”
从我在学校里记得的,我们是如何制作我们的pascal编译器的。
http://en.wikipedia.org/wiki/GNU_bison
创建树后。然后,您可以分析子树,然后根节点将是子树的总和。
答案 3 :(得分:0)
这些可能是您可能需要考虑的一些步骤
这些不是精确的步骤,但它是一种值得研究的启发式方法 - 尝试解决这些问题,根据对您有意义的方式进行更改等。