C 簡易計算器自寫棧版

2021-10-24 13:46:24 字數 1663 閱讀 8708

資料結構:字元陣列。

概要設計:自定義乙個棧類,包含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 而棧非空 棧頂運算級別 當前字元運算...