堆疊實現乙個整型計算器

2021-09-27 13:26:32 字數 1209 閱讀 5035

計算器特性: 支援整型運算(±*/%),能夠處理運算子和運算元間的空格,支援括號

實現思路:

利用乙個運算元堆疊dgt和乙個運算子堆疊ops實現;

1、從左至右掃瞄運算表示式輸入,若為運算元則直接壓入dgt堆疊

2、若為運算子則判斷ops中是否已經存在運算子,不存在則直接壓入,存在則與棧頂運算子比較優先順序,優先順序高則直接壓入,否則就持續pop(每次pop就是取出dgt最頂上兩個數和ops棧頂的運算子作一次運算後將結果重新壓回dgt),直到找到乙個優先順序比當前運算子c低的或者堆疊空了。

3、最後到句末\n時再把之前沒有pop的運算全部pop掉,最終表示式的結果就是dgt[0]的值

#include

char ops[

100]

;int o_top =-1

;int dgt[

100]

;int d_top =-1

;void

pop()}

intprio

(char c)

}int

main()

else

if(c ==

'(')

else

if(c ==

')')

else

// 是運算子且優先順序不高於前乙個運算子

// if (ops[o_top] != '(' && prio(c) <= prio(ops[o_top]))

while

(o_top >=

0&& ops[o_top]

!='('

&&prio

(c)<=

prio

(ops[o_top]))

pop();

ops[

++o_top]

= c;}}

}while

(o_top >=0)

pop();

printf

("%d\n"

, dgt[0]

);getchar()

;}

測試用例:

// testcase: 3 * 5 / 4 + (7) * ((29) * 6 / (4 - 1 + 7 * 8 / 5 * 6 * 2 + 5 + 7 - 4)) --> 10

// testcase: 2+3-4*1+5%2 --> 2

實現乙個計算器

一直以來,我都想寫一門語言,但無從下手。我找到了很多編譯原理的教程,但始終覺得內容晦澀,理解不了,所以先嘗試寫乙個簡單的,比如 計算器。網上有很多關於計算器的實現,但大多需要有編譯原理的基礎,對於我這種小白實在難以理解。我決定採用暴力模擬的方式,需要用正規表示式,但我不想自己實現,所以用js。計算器...

實現乙個計算器

一直以來,我都想寫一門語言,但無從下手。我找到了很多編譯原理的教程,但始終覺得內容晦澀,理解不了,所以先嘗試寫乙個簡單的,比如 計算器。網上有很多關於計算器的實現,但大多需要有編譯原理的基礎,對於我這種小白實在難以理解。我決定採用暴力模擬的方式,需要用正規表示式,但我不想自己實現,所以用js。計算器...

Pythons實現乙個計算器

coding utf 8 from tkinter import def calculate result eval equ.get equ.set equ.get n str result def show buttonstring content equ.get if content 0 con...