1.中綴表示式轉字尾表示式
中綴:a/(b-c)+d*e
字尾: abc-/de*+
轉換步驟:
(1)從左到右掃瞄中綴表示式,遇到#轉(6);
(2)遇到運算元直接輸出;(不進棧)
(3)遇到「)」,則連續出棧輸出,直到遇到「(」為止(「(」出棧但不輸出);否則
(4)若是其它操作符,則與棧頂的操作符比較優先順序;若優先順序小於棧頂的優先順序,如a*b+c,說明*號所需的兩個數a和b已經輸出,則把*號彈出,如此反覆,直到棧外優先順序比棧內優先順序高,最後把+號進棧.若優先順序大於棧頂優先順序,如a+b*c,說明*號所需的兩個數b和c還有乙個沒有輸出,所以把*號進棧.
(5)轉(1);
(6)輸出棧中剩餘操作符(#除外)。
2.轉換的關鍵:確定操作符的優先順序
優先順序決定操作符是進棧或出棧。
操作符在棧內外的優先順序應該不同,以體現中綴表示式同優先順序操作符從左到右的計算要求。「(」的優先順序在棧外最高,但進棧後應該比除#外的操作符低,便於括號內的其它操作符進棧。
isp——棧內優先順序
icp——棧外優先順序
操作符 # ( */ +- )
icp 0 7 4 2 1
isp 0 1 5 3 7
C 實現簡單計算器
要求 輸入乙個包含 的非負整數計算表示式,計算表示式的值,每個字元之間需有乙個空格,若一行輸入為0,則退出程式。輸入樣例 4 2 5 7 11 輸出樣例 13.36 實現 include include using namespace std char str 200 儲存表示式字串 int mat...
C 實現簡易計算器
include include include define fin cin define fo using namespace std bool isoperator char x int getpriority char x bool isbracket char x int dooperate...
C 實現計算器功能
注意 判斷數值和表示式 的合理性。include include include define max len 200 判斷字元是否合理 0 9 bool checkinput char c if c 0x2e c 0x2b c 0x2d c 0x2a c 0x2f return false boo...