任務描述:
1.從文件讀取表達式,判斷表達式是否合理;
2.將表達式轉爲後綴形式;
3.求值
解決方案:
一.文件讀取:
FILE fp;//文件指針
fp = fopen("demo.txt","r");
char expr[20] = {0};
char c;
int i = 0;
while( (c = fgetc(fp) != EOF){//讀到文件末尾時返回的是EOF
expr[i] = c;
i++;
}
二.判斷是否合理見 https://blog.csdn.net/lvdoujack/article/details/91491556
三.中綴形式轉後綴形式:
1.數字直接保存進後綴表達式
2.操作符需要判斷
(1)棧空則入棧;
(2)棧非空則比較當前op和棧頂op的優先級
當前 ‘(’ 大於所有棧頂op;
當前 ‘)’ 等於 棧頂 '(' ,小於其它棧頂op;
當前op與棧頂op同級時,當前op小於棧頂op;
當前op是 + - 小於 棧頂*/
當前op是 * / 大於 棧頂+-
(3)判斷結果做處理
大於:當前op入棧
等於:此時爲左右括號相遇,將棧頂op彈出且當前op不作處理
小於:棧頂op出棧並且存入後綴表達式,當前op繼續與新的棧頂op比較。
3.掃描完成後若棧非空則依次出棧存入後綴表達式
四.後綴表達式求值
1.遍歷後綴表達式
2.遇見數字時入棧
3.遇見操作符時依次出棧操作數b,a做運算a op b,結果入棧
4.遍歷完成後棧內的那個元素即是結果