題目描述
給定乙個字串描述的算術表示式,計算出結果值。輸入字串長度不超過100,合法的字元包括」+, -, *, /, (, )」,」0-9」,字串內容的合法性及表示式語法的合法性由做題者檢查。本題目只涉及整型計算。題目描述
給定乙個字串描述的算術表示式,計算出結果值。輸入字串長度不超過100,合法的字元包括」+, -, *, /, (, )」,」0-9」,字串內容的合法性及表示式語法的合法性由做題者檢查。本題目只涉及整型計算。
對於乙個算術表示式,計算主要分為兩步,第一,把所給的中綴表示式轉變成字尾表示式,第二,對字尾表示式進行運算。
這裡的基本思路是:
用到了三個容器,vectorv,stacks1,stacks2;
1.for迴圈遍歷輸入的字串,如果是數字,則取連續的數字進行輸出到v中。
如果是運算子,則要進行判斷:
如果此時棧s1為空或者s1的棧頂元素為右括號,直接入棧s1
如果棧s1非空且此時棧頂元素為四則運算符則需要比較此時字串的運算子和棧頂元素的優先順序,如果此時字串輸入的運算子優先順序大於棧頂運算子則直接進棧,否則把棧中所有優先順序大於等於輸入運算子的運算子出棧,再把輸入的運算子入棧。
如果不是運算子,是右括號則直接進棧,如果是左括號,則把棧頂元素依次彈出,依次放入到vector容器中,迴圈條件是棧頂元素不等於右括號,迴圈結束再把右括號彈出。
遍歷結束後,把棧中的元素依次彈出放入到vector容器中。
此時,遍歷vector容器則是表示式的字尾表示式。
2.利用棧s2進行計算,遍歷vector容器,如果是數字則直接進棧,如果是運算子,則把棧頂的兩個元素彈出進行相應運算,把運算結果再入棧,重複操作,直至遍歷結束,此時棧中剩下的元素就是本次表示式的結果,再進行輸出。
具體實現**如下:
#include
#include
#include
#include
using
namespace std;
intpri
(char a)
intcal
(int a,
int b,string c)
string ctos
(char c)
bool
isint
(string s)
if(num==s.
size()
)return
true
;else
return
false;}
intmain()
elseif(
pri(s[i]
)>
pri(s1.
top())
)else}}
else
s1.pop();
}}}}
while
(!s1.
empty()
)//for(int i=0;i// coutfor(
int i=
0;isize()
;i++)}
sum=s2.
top();
cout<}}
用棧實現四則運算
課本53頁,用棧來實現的簡單的四則運算表示式.是表示式結束符,注意在表示式輸入完畢後需再輸入乙個 表示結束.eg 4 2 3 10 5 include include include include include using namespace std stack opnd 運算元棧 stack ...
實現四則運算
總結最近在看資料結構,遇到第乙個實際棧的應用,記錄 將平時的四則運算表示式又稱為中綴表示式轉化為字尾表示式。遇數字輸出,遇符號進棧,符號優先順序低於棧當前符號則輸出,輸出直到同等優先順序符號。例 9 3 1 2 輸出 棧 9 in 9 in 9 3 9 3 in 9 3 1 9 3 1 in 右括號...
Python 棧 四則運算
首先了解一下棧 棧是限定僅在表尾進行插入和刪除操作的線性表。允許插入與刪除的一段叫做棧頂,另一端 叫做棧底,不含任何資料元素的棧稱為空棧。棧又稱為後進先出 last in first out 的線性 表,簡稱lifo結構。在python中,可以用列表來實現棧 lt 3 相當於壓棧 print lt ...