資料結構:字元陣列。
概要設計:自定義乙個棧類,包含char和int兩種型別的陣列。定義乙個容量為100的字元陣列,將數字放入數字棧中,將運算子放入字元棧中。出棧規則:當前入棧的運算子比棧頂的運算子優先順序低。
詳細設計:
1.棧中私有部分定義了整型變數top和char、int兩種型別的陣列,可利用同名但變數不同的函式push分別將數字和運算子放入不同棧內。
2. 主函式中定義乙個容量為100的字元陣列,利用acsii碼識別出數字和運算子,利用map函式將數字字元轉化為int型。
3建立兩個類物件,分別表示數字棧和運算子棧,將數字放入數字棧中,將運算子放入字元棧中。
4.寫乙個可以區分運算子優先順序的函式。
5.寫乙個用來識別運算子並計算的函式。
6.最後運算結束時用top函式獲得數字棧頂端的值,也就是運算結果。
#include
#include
#include
using
namespace std;
map<
char
,int
> mp;
class
stack
bool
empty()
bool
full()
void
push
(int x)
void
push
(char y)
inttop_()
char
_top_()
void
pop()}
;stack num;
stack op;
intyxj
(char a)
//判定運算子優先順序
if(a==
'('||a==
')')
if(a==
'+'||a==
'-')
if(a==
'*'||a==
'/')
return k;
}void
count()
intaccount
(string &str)
num.
push
(s);
i=j-1;
}else
elseif(
yxj(str[i]
)>
yxj(op.
_top_()
)||str[i]
=='('
||str[i]
==')'
)//待入棧運算子優先順序高或是'('和')'push
op.pop();
//pop掉'('}}
else
//待入棧運算子str[i]優先順序低於op.top時先對棧頂運算子進行計算
if(op.
_top_()
=='='
)break;}
}if(op.
_top_()
=='=')}
return num.
top_()
;}intmain()
執行結果
棧 簡易計算器
題目描述 讀入乙個只包含 的非負整數計算表示式,計算該表示式的值。輸入 測試輸入包含若干測試用例,每個測試用例佔一行,每行不超過200個字元,整數和運算子之間用乙個空格分隔。沒有非法表示式。當一行中只有0時輸入結束,相應的結果不要輸出。輸出 對每個測試用例輸出1行,即該表示式的值,精確到小數點後2位...
棧實現簡易計算器
計算數學表示式的值。輸入數學表示式,輸出表示式的計算結果。數學表示式由單個數字和運算子 構成,例如 2 3 4 5 6 4。include include include include using namespace std double result int tag template class...
C 簡易計算器
介紹 僅支援自然數間的 操作,並沒有括號。實現 利用棧實現儲存運算數以及運算子。流程 輸入 string exp 對exp進行處理 數字入數棧,運算子入字元棧。對字元棧檢測,非空時進行 計算 輸出 結果。處理 數字則入數棧,字元就進行判斷,1 棧空,字元入棧 2 而棧非空 棧頂運算級別 當前字元運算...