(1).首先從string讀入表示式,取出每乙個字元後裝入deque容器coll1中(原始碼在後面)。
(2).從該容器取出每乙個元素,利用棧將中綴表示式轉換成字尾表示式(可參考:將字尾表示式裝入容器coll3中。
(3).最後從coll3中取出元素逐一處理,既使用逆波蘭式求值(如下圖)。
c++原始碼
可編譯並正常執行,此程式只支援一位數字運算,例如 3*(2+8)/5+6,有需要多位運算或者浮點型運算請自行修改,原理相同。
#include#include#include#includeusing namespace std;
//判斷是否為括號
bool ispra(char c)
//獲得符號的優先性
int getpri(char c)
}//判斷符號的優先性
void check(char c, stack& coll2, deque& coll3)
if(ispra(c))
//當遇到左括號時,彈出但不加入coll3(字尾表示式中)
coll2.pop();
} }else //如果不是括號
else
}}//從coll中取出元素,分配元素到coll2和coll3中
void allocate(deque& coll1, stack& coll2, deque& coll3)
else
}//如果輸入結束,將coll2的元素全部彈出,加入字尾表示式中
while(!coll2.empty()) }
//計算字尾表示式
void calculate(deque& coll3, stack& coll4)
else //如果是操作符,從棧中彈出元素進行計算
} }}
int main()
//從coll中取出元素,分配元素到coll2和coll3中
allocate(coll1,coll2,coll3);
//計算字尾表示式
calculate(coll3,coll4);
cout<
帶括號的四則運算
帶括號的四則運算 public class caculatordemo 帶括號的四則運算 param exp return public static double calckuohao string exp else 不帶括號的四則運算 param exp return public static...
C 實現四則運算器 帶括號
基本分析可以看另一篇文章c 實現四則運算器 無括號 棧的實現 ifndef stack h define stack h includeclass stack int stack int unsigned int capacity bottom new int capacity 1 top bott...
含括號的四則運算
總體思路 需要用到棧,從中綴表示式到字尾表示式,再把字尾表示式轉化為結果,比如計算9 3 1 5 4 2,這個式子就叫做中綴表示式,然後我們需要把它轉化成字尾表答式,方法 將中綴表示式從左到右讀取,如果是數字,直接輸出到字尾表示式,如果是字元,則如果是右括號,把從棧頂開始到棧中左括號的字元輸出到字尾...