使用C语言计算中缀表达式的最简单方法是什么?

Bis*_*Das 16 c math expression infix-notation evaluate

假设用户输入中缀表达式作为字符串?使用C语言评估表达式结果的最简单方法(最简单的意思是短语 t)是什么?

可能的方法是将其转换为后缀然后使用stacks.But它相当长的过程.有没有办法使用像atoi()eval()这样的函数来简化工作?

Mar*_*n B 5

当然,最有教育意义的方式(甚至可能是最容易的,一旦你知道如何)就是学习如何编写自己的递归下降解析器.C中的中缀表达式解析器不是很长.

以下是 Eli Bendersky关于解析的一些优秀博客文章之一.(这是与你最相关的那个,但我强烈推荐所有这些.)它包含一个中缀表达式解析器的源代码 - 诚然在Python中,而不是C,但转换应该相当简单,你'我会在这个过程中学到很多东西.


小智 5

C没有内置的“ eval”功能,但是有提供此功能的库。

我强烈建议使用TinyExpr。它是免费的开源C代码,可通过字符串实现数学评估。TinyExpr只是1个C文件,大约500行代码。我认为您不会找到一种更短或更简单的方法来真正完成(而不仅仅是玩具示例)。

这是一个使用它的完整示例,该示例应说明它的简单程度:

#include "tinyexpr.h"
#include <stdio.h>

int main(int argc, char *argv[])
{
    printf("%f\n", te_interp("5 * 5", 0)); //Prints 25
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

如果您想自己构建一个表达式求解器,我建议您以TinyExpr源代码为起点。它很干净而且易于遵循。


Jav*_*ier 2

你需要解析字符串。C 中没有eval()(就像大多数静态语言一样),因此您需要编写自己的解析器或找到一些库来提供帮助。

由于最易于使用的解析器适用于 C++ 而不是 C,所以我宁愿使用完整的嵌入式语言。我最喜欢的是Lua,如果不包含这些库,它会非常轻量。此外,语法比 C 更好,因此您的用户可能会更喜欢它。

当然,Lua 是一种成熟的编程语言,因此它可能不合适,或者也许它可以以其他方式提供帮助(以便更轻松地扩展应用程序)。