棧實現簡單的計算器

2021-07-28 20:53:02 字數 1477 閱讀 9970

上個星期的作業,現在才改好。。。。。

基本思路:

當我們從鍵盤上輸入一串字元,比如1+(2+3),建立兩個棧,乙個存放運算子的棧toperator,乙個存放運算元number,依次遍歷。

遇到運算元就依次存放到操作棧裡;

遇到運算子時,優先順序高的就直接壓進運算子棧裡,優先順序低的就依次彈出操作棧中的兩個值與運算子進行計算,然後把計算的值再次壓進運算元棧裡。其中有括號的情況,左括號的直接壓進,當右括號遇到左括號的時候就直接彈出左括號。

程式:

類模組:

#ifndef _stack_h_

#define _stack_h_

#includeusing namespace std;

templateclass stack

;template stack::stack(int maxsize):maxsize_(maxsize),top_(-1)

templatestack::~stack()

templatevoid stack::push(const t& n)

top_++;

s_[top_] = n;

}templatevoid stack::pop()

top_--;

}templatet& stack::gettop() const

return s_[top_];

}templatebool stack::empty()const

#endif

#include#include"stack.h"

#include#includeusing namespace std;

stacknumber(100);

stacktoperator(100);

int calsum(int a,int b,char ope)//計算過程

if(ope == '/')

if(ope == '+')

if(ope == '-')

return b;

}int priority(char ch)//優先順序

if(ch == '+' || ch == '-')

if(ch == '*' || ch == '/')

}int is_number(char ch)//判斷是數字還是運算子

return 0;

}int calculate(char* buffer)

if((is_number(buffer[i])) == 0)//是運算子

else//不是第一次壓棧

else}}

} i++;//往後依次遍歷

}while(toperator.empty() != true)//遍歷結束,但是棧中還有數

return b;

}int main()

catch(int a)

{cout<<"number failed"<<__line__<

用棧實現簡單計算器

1 輸入乙個逆波蘭表示式 字尾表示式 使用棧 stack 計算其結果 2 支援小括號和多位數整數,只支援對整數的計算。從左至右掃瞄表示式,遇到數字時,將數字壓入堆疊,遇到運算子時,彈出棧頂的兩個數,用運算子對它們做相應的計算 次頂元素 和 棧頂元素 並將結果入棧 重複上述過程直到表示式最右端,最後運...

簡單計算器(棧)

開始複習棧,這個題感覺見得很多,各種各樣的,但是核心思路就是把中綴表示式轉化為字尾表示式,我們老師說這個東西也叫作中序二叉樹轉後序二叉樹。大概實現的方式就是用棧來實現 最開始感覺沒啥思路,因為之前一直都不會這種題 論為什麼我這麼菜,之前沒有好好學過棧,知道了stl中有stack後還是方便很多 第一次...

棧實現計算器

在表示式中的轉換規則 運算元 進棧 操作符 1 進棧 空棧 優先順序高 棧頂是 同時表示式不是 2 出棧並計算 表示式符號的優先順序不高於棧頂符號 表示式為 同時棧頂不為 表示式 0 同時棧不為空 3 出棧但不計算 表示式為 同時棧頂為 標頭檔案 標頭檔案 ifndef stack h define...