不過目前這個功能太少,而且能算的十分有限,
測試輸入為
4+4*5+3=
測試輸出為
4 4 5 * + 3 +=27
主要就是了解一下怎麼把中綴表示式轉化成字尾表示式,然後再利用字尾表示式求值,我後續會完善這個程式,做個真正意義上的計算器。。o(∩_∩)o
轉化步驟我搜尋了一下,大致如下:
將中綴表示式轉換為等價的字尾表示式的過程要使用乙個棧放「(」,具體可以按照下面的方式進行。
(1)從左到右依次掃瞄中綴表示式的每乙個字元,如果是數字字元和圓點「.」則直接將它們寫入字尾表示式中。
(2)如果遇到的是開括號「(」,則將它們壓入乙個操作符棧(不需要與棧頂操作符相比較),它表明乙個新的計算層次的開始,在遇到和它匹配的閉括號「)」時,將棧中的元素彈出來並放入字尾表示式中,直到棧頂元素為「(」時,將棧頂元素「(」彈出(不需要加入字尾表示式),表明這一層括號內的操作處理完畢。
(3)如果遇到的是操作符,則將該操作符和操作符棧頂元素比較:
1、當所遇到的操作符的優先順序小於或等於棧頂元素的優先順序時,則取 出棧頂元素放入字尾表示式,並彈出該棧頂元素,反覆執行直到當前操作符的優先順序大於棧頂元素的優先順序小於;
2、當所遇到的操作符的優先順序大於棧頂元素的優先順序的時則將它壓入棧中。
(4)重複上述步驟直到遇到中綴表示式的結束符標記「#」,彈出棧中的所有元素並放入字尾表示式中,轉換結束
#include#include "stack.h"
#include "deque.h"
bool order[48][48];
void initial();
void judge(char);
bool issym(char);
int calculate();
dequeexpression;
stacksymbol;
stacknumber;
int main()
expression.show();
cout<<"="stackexp;
while(!expression.empty())
}else
num.push(ch-'0');
} return num.top();
}
計算器(表示式計算 字尾表示式實現)逆波蘭表示式
問題描述 從標準輸入中讀入乙個整數算術運算表示式,如24 1 2 36 6 2 2 12 2 2 計算表示式結果,並輸出。要求 1 表示式運算子只有 表示式末尾的 字元表示表示式輸入結束,表示式中可能會出現空格 2 表示式中會出現圓括號,括號可能巢狀,不會出現錯誤的表示式 3 出現除號 時,以整數相...
字尾表示式做計算器程式
概念 字尾表示式是相較於中綴表示式而言的,像我們平時寫的2 3 4 5 6 7就是乙個中綴表示式,那麼如何將之變為字尾表示式呢?字尾表示式如何用來求解呢?先來第乙個問題 中綴 字尾 變為字尾表示式方法 規則 1.遇到運算元 直接新增到字尾表示式中 2.棧為空時,遇到運算子,直接入棧 3.遇到左括號 ...
表示式計算器
早在上大學的時候,就想編寫乙個可以計算數學表示式的計算器,因為windowsxp自帶的計算器不支援表示式輸入,當要計算乙個算式時,不太方便。表示式計算器看似簡單,但要想把它做完善,不太容易,經過幾次改進之後,於一年前完成了這個小程式,雖然可能會有一些不足,不過也不打算再投入時間了,價值不大,只是拿來...