利用棧實現乙個簡易的計算器(資料結構之棧)

2021-09-11 18:49:56 字數 1425 閱讀 8534

實現了加減乘除運算(沒有使用stl)

1.乙個資料棧,乙個符號棧

2.優先順序判斷

3.負號和減號的判別與處理

4.括號匹配

**如下:

#include#include#include/*1、建立棧類,採用陣列描述;

2、計算數學表示式的值。

輸入數學表示式,輸出表示式的計算結果。數學表示式由單個數字和

運算子「+」、「-」、「*」、「/」、「(」、「) 」構成,例如 2+3*(4+5)–6/4。

假定表示式輸入格式合法。

選做:*3、以乙個 m*n 的長方陣表示迷宮,0 和 1 分別表示迷宮中的通路和障礙。

設計乙個程式,對任意設定的迷宮,求出一條從入口到出口的通路,或得出沒有通路的結論。

迷宮根據乙個迷宮資料檔案建立。迷宮資料檔案由乙個包含 0、1 的矩陣

組成。迷宮的通路可以使用通路上各點的座標序列進行展示(使用圖形展示最佳)。*/

using namespace std;

templateclass mystack

~mystack()//析構函式

bool empty()//判斷棧是否為空

int size()//返回棧中元素個數

t & top()//返回棧頂元素

if(flag)

n.push(k); //將讀入的數字壓到數字棧

} else

switch(s[i])

break;

case '*':

case '/':

if(c.empty()||c.top()=='(') c.push(s[i]);//如果符號棧為空或者棧頂元素為(,*/直接壓入棧

else if(c.top()=='+'||c.top()=='-') c.push(s[i]);//如果前乙個運算子為+或-,*/直接壓入棧

else if(c.top()=='*'||c.top()=='/')

break;

case '('://左括號直接入棧

c.push(s[i]);

break;

case ')'://遇到右括號 ,對括號內運算直至運算到左括號

while (c.top()!='(')

c.pop();//將左括號彈出棧

break;

default:break;

}} }

cout<<"計算所得的結果是:";

while(!c.empty()) calculate(n,c);

cout<>s; //輸入表示式

length=s.length();

operate(s,length);

} return 0;

}

利用棧實現簡易計算器

輸入數學表示式,輸出結果。其中符號支援加減乘除 乘方及括號,數字支援小數及負數。開兩個陣列,乙個陣列為符號棧,乙個陣列為數字棧。字串讀入表示式並逐位處理,有數字就擷取下來存入數字棧,運算符號截下來存入符號棧,若發現當前符號優先順序小於等於前乙個符號的優先順序,就要把前面那部分的值計算出來,例如3 2...

棧實現簡易計算器

計算數學表示式的值。輸入數學表示式,輸出表示式的計算結果。數學表示式由單個數字和運算子 構成,例如 2 3 4 5 6 4。include include include include using namespace std double result int tag template class...

實現乙個計算器

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