後綴表達式求值

任務描述:

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.遍歷完成後棧內的那個元素即是結果

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章