?? 7-3-2.cpp
字號:
#include <iostream.h>
#include <stdlib.h>
#define STACKSIZE 10
class Stack {
private:
long buffer[STACKSIZE];
long *sp;
public:
Stack() { sp = buffer; }
~Stack() { };
void Empty() { sp = buffer; }
bool IsEmpty() {
if(sp == buffer) return true;
else return false;
}
void Push(long data) {
if(sp >= buffer+STACKSIZE)
cerr << "Stack overflow !" << endl;
else *sp ++ = data;
}
long Pop() {
if(sp <= buffer) {
cerr << "Stack is Empty!" << endl;
return 0;
}
else return *--sp;
}
};
class Calculator {
private:
Stack Nstack; // 處理操作數
Stack Ostack; // 處理運算符
public:
Calculator(void) { };
void Cal(void); //計算器運算程序
void GetTwoNum(int &Num1,int &Num2);
void Compute(char Opr);
void Clear(void);
};
void Calculator::Clear() {
Nstack.Empty();
Ostack.Empty();
}
void Calculator::GetTwoNum(int &Num1,int &Num2) {
Num1=Nstack.Pop();
Num2=Nstack.Pop();
}
void Calculator::Compute(char Opr) {
int Num1, Num2;
if(Opr != '=' ) GetTwoNum(Num1,Num2);
switch(Opr) {
case '+': Nstack.Push(Num2 + Num1); break; //結果壓棧
case '-': Nstack.Push(Num2 - Num1); break;
case '*': Nstack.Push(Num2 * Num1); break;
case '/': Nstack.Push(Num2 / Num1); break;
case '=': cout << Nstack.Pop() << endl; //輸出結果
}
}
void Calculator::Cal(void) {
bool b1=true, b2=true;
char ch1, ch2, str[50];
int k = -1;
while(b2) {
cin >> ch1;
if(ch1 >= '0' && ch1 <= '9') {
k++;
str[k] = ch1;
} //數字字符添入串中
else {
if(k>=0) {
str[k+1] = '\0'; //數字串生成
Nstack.Push(atoi(str)); //數字串轉換為整數后壓棧
k=-1;
}
switch(ch1) {
case 'c': Clear();break;
case '+': case '-':
while(! Ostack.IsEmpty()) {
ch2=Ostack.Pop(); //不會有比'+' '-'優先級低的
Compute(ch2);
}
Ostack.Push(ch1); break;
case '*':case '/':
while(!Ostack.IsEmpty() && b1) {
ch2=Ostack.Pop(); //把棧頂運算符彈出
if(ch2 == '*' || ch2 == '/') //比較優先級
Compute(ch2); //新的優先級并不高
else { //新的優先級高
Ostack.Push(ch2); //先把原棧中的
b1=false; //運算符壓回去
}
}
Ostack.Push(ch1); //再把新的運算符壓棧
b1=true; break; //將b1復原
case '=':
while(!Ostack.IsEmpty()) {
ch2=Ostack.Pop();
Compute(ch2);
}
Compute(ch1); break;
}
if(ch1 == 'z') b2=false;
}
}
}
main()
{ Calculator MyCal;
MyCal.Cal();
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -