表示式求值(TYVJ1043)

2021-09-27 15:51:19 字數 858 閱讀 6476

我他喵的被這題氣死好吧。(2年前的我調了3個小時,2年後調了1.5個小時)

求乙個中綴表示式的值(小學生都會好吧)

首先:計算機最喜歡的一定是字尾表示式,我們只要從頭到尾遍歷,然後碰到數字就壓入棧,碰到運算子就直接取出棧頂的2個元素直接進行計算,並將結果壓入棧。

那我們這裡要做的操作就是將中綴轉成字尾。

怎麼做呢?

1.碰到數字將他輸出

2.碰到左括號將他入棧。

3.碰到運算子只要棧頂符號的優先順序不低於新符號,就不斷取出棧頂並輸出,最後把新符號入棧。

4.若是碰到右括號,就一直輸出直到碰到左括號。

#include using namespace std;

string s;

stacksa;

stacksb;//是int型的

int cp(char x1,char x2)//判斷x1是否》=x2

//優化:賦值然後直接比較

int pow(int a,int x)

return ans;

}void cal(char ch)

int main()

// printf("%d ",num);

sb.push(num);

i--;

// } else

sa.pop();

}else

}sa.push(s[i]);

}} }

while(!sa.empty())

//會有多餘括號

cout

} /*

2+(3*4-1)*2

*/

表示式求值

程式的說明見清華大學出版社 資料結構 c語言版 include include define stack init size 40 define stackincrement 20 define ok 1 define false 0 typedef structs stack typedef st...

表示式求值

既然是表示式求值,自然需要在記憶體中儲存計算結果以及中間值。在 用c語言寫直譯器 一 中提過 變數要求是若型別,而 c 語言中的 view plaincopy to clipboardprint?in basic io.h define memery size 26 typedef enum var...

表示式求值

寫了乙個下午,各種糾結,各種問,終於搞明白了。但是自己還是想出來的一點東西的。很爽歪歪的,哈哈。先貼第一次的 include include include include include includeusing namespace std char data 7 7 int sign char ...