2012-12-13 56 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說的。沒有「功能」來評估這種表達。你必須自己寫一個恰好是解析器的東西...... –