在C中将字符串转换为表达式

时间:2012-12-13 19:44:14

标签: c dynamic expression

  

可能重复:
  What is a fast C or Objective-C math parser?

我可以使用哪些函数代码将动态字符串转换为表达式并对其进行求值?

#include <stdio.h>
#include <conio.h>
#include <string.h>
int main() {
  char var1[] = "3";
  char var2[] = "2";
  char var3[] = "5";
  char exp[20]  = "";
  int result;

  // Trying to create a random expression "(3+2)*5" 
  strcat(exp, "( ");
  strcat(exp, var1);
  strcat(exp, " + ");  
  strcat(exp, var2);  
  strcat(exp, " ) * ");  
  strcat(exp, var3);    

  result = somefunction(exp);

  printf("Result : %i\n", result);
  return 0;
}

2 个答案:

答案 0 :(得分:3)

你必须解析字符串并对其进行评估 - 这很琐碎,对不起。但是你可以看到working example here

答案 1 :(得分:0)

你在谈论编写解析器。您的第一步是找出该解析器的规则。

如果你简单地定义它们“所有的数学都是从左到右评估的,那么parens优先”,那么它并不十分困难。但这显然会为“1 + 2 * 3”产生一些意想不到的结果。

如果您有选项,reverse-polish-notation计算器更容易实现。如果您没有该选项,则可能需要解析为一个树来启动,然后以“leaf-to-root”顺序进行评估。