中綴表達式轉換為後綴表達式並計算

先把中綴表達式轉為後綴表達式,再入棧計算。

轉化主要遵循以下原則:1.遇到操作數,直接輸出;2.棧為空時,遇到運算符,入棧;3.遇到左括號,將其入棧;4.遇到右括號,執行出棧操作,並將出棧的元素輸出,直到彈出棧的是左括號,左括號不輸出, 左括號也要彈出;5.遇到其他運算符’+”-”*”/’時,彈出所有優先級大於或等於該運算符的棧頂元素,然後將該運算符入棧, 遇到左括號時不能再彈出;6.最終將棧中的元素依次出棧,輸出。經過上面的步驟,得到的輸出既是轉換得到的後綴表達式。舉例:a+b*c+(d*e+f)g ———> abc*+de*f+g*+

計算參照一下原則:

從左到右掃描後綴字符串, 遇到運算符則計算棧內的前兩個數,再把計算值填回去,直到結束。

1.輸入數字,則直接輸入到後綴字符串。2. 空棧時字符串直接入棧。3.遇到b c再輸出,遇到*因為優先級高,入棧。4.遇到加號,把棧內的高優先級運算符彈出。5.左括號入棧。6. 遇到d 直接輸出7.遇到*號, 入棧。8.遇到e 入棧9.+號優先級低, 所以把*號輸出10.遇到f 輸出b11f31a2ecee1b9067dab975bce8ee8111.遇到右括號,把+彈出,把(彈出刪掉。edaa4fda71648eee82d2272e2cbc3f2212.星號優先級高,入棧2ec907478b249ba46850ba872c2d3d5d13.數字輸出14.沒有字符後把棧內順序彈出

1.編譯過程中出現 Segmentation fault(core dumped), 一般是數組或者棧越界導致的; 或者是沒有正常return;2. 在pop的過程中註意判斷棧是否為空, 為空就不能繼續循環。

3.對STRING的操作要使用 str.push_back(); 或者 str+ =c; 不能使用數組賦值,因為不知道STR[]內存是多少,就會溢出。

4.先寫註釋,把每一步寫清楚。

5.調試也要寫進去,這樣方便定位。

具體代碼可以參閱我的Git

发表回复

相关推荐

搬家祝福语大全,这几条真的有用

搬新家是一件非常值得庆祝的一件事,在亲友搬家的时候能够说几句吉祥话,既能拉近彼此的距离,搬新家的人心里也更开心。最近 ...

· 34秒前

建筑单体设计与节能

一、建筑物体形与节能 1、体形系数定义:建筑物与室外大气接触的外表面积与其所包围的体积的比值。外表面积中,不包括地面和 ...

· 58秒前

群星3.6版“猎户座”铁人休闲探索战报(4)

群星3.6版“猎户座”铁人休闲探索战报(3) – 知乎 93紫龙:群星3.6版“猎户座”铁人休闲探索战报(3)

· 4分钟前

千门八将:三十六天局七十二地局108局

古老相传千门乃是推演八卦的祖师,伏羲氏所立。女娲造人后,补天而去,伏羲住世观黎民苦厄,而设虔门,希望能传下思想,铸万 ...

· 5分钟前

埋线双眼皮效果好吗?这几类人千万别做埋线

更——最近很多宝宝发照片给我,让我看看自己是否适合埋线,宝贝们,记得最好是发素颜,眼睛平视前方的照片哦,这样军师才能判 ...

· 8分钟前