2012-12-13 58 views
0

可能重复:我可以用
What is a fast C or Objective-C math parser?转换字符串表达式用C

什么功能代码的动态字符串转换为表达和评价呢?

#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; 
} 

回答

3

你必须解析字符串并对其进行评估 - 这远不是微不足道的,对不起。但你可以看到一个working example here

0

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

如果您将它们定义为“所有数学从左到右评估,parens优先考虑”,那么它不是非常困难。但是,这显然产生了“1 + 2 * 3”的一些意想不到的结果。

如果您有选择,reverse-polish-notation计算器更容易实现。如果你没有这个选项,你可能需要解析一个树来开始,然后以“叶到根”的顺序进行评估。

+0

嗯......我记得这是我很久以前对我的学校作业.. :) 只是为了补充jkerian说的。没有“功能”来评估这种表达。你必须自己写一个恰好是解析器的东西...... –