運算表示式求值模板

2022-05-25 15:06:07 字數 1180 閱讀 1881

表示式計算

##使用方法

輸入合法的表示式,加減乘除,可以帶括號,用空格分開數字和符號,-1為結束標誌,比如:

`2 * 5 + 3 -1`

注意:這是用來算具體答案的,不是轉化成字尾表示式輸出的,當然,思想是遞迴建立表示式樹,然後後序遍歷得逆波蘭式,然後用棧計算結果

##模板

```#include#include#include#include//#includeusing namespace std;

#define mem(x,num) memset(x,num,sizeof(x))

const int n = 1e3 + 5;

const int defaultsize = 100;

int lson[n], rson[n];

int nc = 0;

int cut = 0;

struct num

bool is_op()

double tonum()

};num op[n];

num arra[defaultsize];

void init()

int build_tree(num s, int l, int r)

for (int i(l); i < r; i++)

}if (tag1 < 0)tag1 = tag2;// no + or - outside

if (tag1 < 0)return build_tree(s, l + 1, r - 1); // no * or / outside mean all operator and num in ()

u = ++nc;

lson[u] = build_tree(s, l, tag1);

rson[u] = build_tree(s, tag1 + 1, r);

op[u] = s[tag1];

return u;

}void post(int rt)

double query(num s,int n)

else

p.push(y);}}

return p.top();

}int main()

build_tree(s, 0,n); // strlen(s)

post(1);

cout << query(arra,n)<

C 運算表示式求值順序

優先順序雖然規定了運算物件的組合方式,但是沒有說明運算物件按照什麼順序求值。例如 int i f1 f2 我們不知道先求f1還是先求f2,倘若f1和f2指向並修改了同一物件,則會引發錯誤。例如 int i 0 cout 結果 本人在vs2017中得到的允許結果為1 1,這個就是錯誤表示式,產生未定義...

四則運算表示式求值

03 四則運算表示式求值 輸入輸入為四則運算表示式,僅由陣列 四則運算符 左右括號組成,不含空格。假設運算子結果都是整數。輸出輸出這個表示式的值 分析首先我們要搞清楚表示式的定義是什麼 表示式 由乙個或者多個項組成,多個項的表示式由 連線 項 由乙個或者多個因子組成,多個因子由 連線 因子 由 表示...

四則運算表示式求值

表示式求值是關於棧的應用,涉及到中綴與字尾式的轉換,本文關於10以內不帶括號的四則運算。9 3 4 x 3 24 1 x 9 5 9 9 5 x 9 4 6 2 x 3 1 42 思路 遇到數字直接入數字棧。遇到運算子,第乙個運算子直接入符號棧,後面的需要與符號棧棧頂元素比較優先順序。若當前優先順序...