中綴表示式求值

2022-02-12 08:09:55 字數 2041 閱讀 5874

1 #include 2 #include3

4using

namespace

std;56

#define stack_init_size 100

7#define stackincrease 1089

//為了簡化函式,資料棧和符號棧用了一種結構體(雖然我知道可以用共用體解決問題,嫌煩),

10//

由此導致的後果是接下來所有的運算過程中不允許出現小數,而且由於是利用ascii表來儲存整數,

11//

所以要求運算數以及運算過程中數不能超過表中的最大值,暫時沒有考慮負數問題,而且不能在輸入時出現兩位數

12//

以上問題全是由於我把數字當成字元處理的結果,單純圖個方便

13 typedef struct

14sqstack;

1920

21int initstack(sqstack &s)

2229 s.top=s.base

;30 s.stacksize=stack_init_size;

31return0;

32}3334

35int push(sqstack &s,char

e)36

45 s.top=s.base+stack_init_size;

46 s.stacksize=stack_init_size+stackincrease;47}

48 *(s.top)=e;//

結構體49 s.top++;

50return0;

51}5253

54int pop(sqstack &s,char &e)

5561 s.top--;

62 e=*(s.top);

63return0;

64}6566

int gettop(sqstack &s,char &e)

6773

else

7478}79

8081

int emptystack(sqstack &s)

8286

8788

int precede(char a,char b)//

a為符號棧棧頂元素,b為待插入的元素

8998

99int evaluateexpression(char *q)

100127

}128 f=char(j+48

);129

push(s2,f);

130if(!emptystack(s1)) gettop(s1,e);//

直到遇到左括號

131if(e=='('

) pop(s1,e);

132}

133}

134if(c=='

+'||c=='

-'||c=='

*'||c=='/'

)135

153}

154 f=char(j+48

);155

push(s1,c);

156push(s2,f);

157}

158if(i==1

) push(s1,c);

159}

160}

161 c=*p++;

162}

163if(!emptystack(s1))

164177

}178

//最後輸出結果

179pop(s2,a);

180 i=a-48

;181

while(*q!='

#') cout << *q++;

182 cout << "

的運算結果為:

"183return0;

184}

185186

187int

main()

188

思路參考:

中綴表示式求值

中綴表示式用於計算乙個表示式,比如計算器 就是這樣實現的 這兒是用棧的資料結構來實現的。首先輸入乙個字串,表示乙個表示式,然後用乙個棧儲存數字,另外乙個棧儲存符號 如果當前運算子優先順序比棧頂元素優先順序高,則入棧,若當前運算子優先順序小於等於棧頂運算子優先順序,則從數字棧中彈出兩個元素,從符號棧中...

中綴表示式求值

表示式求值都需要2個棧。乙個是符號棧,另乙個是數字棧。拿上面的字尾式45 來說,咱們剛才將表示式從4 5轉換到45 的過程是咱們一眼就能看出來的,但是計算機不能像咱們這樣做,因為他不會。他只會從表示式的開頭,順序掃瞄表示式的每乙個字元,它不能像咱們一樣 一眼就 看 出來。計算機是如何轉換的呢?1.從...

中綴表示式求值

計算 calc.cpp 問題描述 小明在你的幫助下,破密了ferrari設的密碼門,正要往前走,突然又出現了乙個密碼門,門上有乙個算式,其中只有 0 9 求出的值就是密碼。小明數學學得不好,還需你幫他的忙。用整數除法 輸入 輸入檔案calc.in共1行,為乙個算式。輸出 輸出檔案calc.out共1...