?? 9_9.h
字號:
//9_9.h
#include <iostream>
#include <cmath>
#include <cstdlib>
#include <cstring>
using namespace std;
enum Boolean {False, True};
#include "9_8.h" // 包含棧類模板定義文件
class Calculator //計算器類
{
private:
Stack<int> S; // 操作數棧
void Enter(int num); //將操作數num壓入棧
//連續將兩個操作數彈出棧,放在opnd1和opnd2中
Boolean GetTwoOperands(int& opnd1, int& opnd2);
void Compute(char op); //執行由操作符op指定的運算
public:
Calculator(void); //構造函數
void Run(void); //運行計算器程序
void Clear(void); //清空操作數棧
};
void Calculator::Enter(int num) // 將操作數num壓入棧
{ S.Push(num); }
// 連續將兩個操作數彈出棧,放在opnd1和opnd2中
// 如果棧中沒有兩個操作數,則返回False 并輸出相關信息
Boolean Calculator::GetTwoOperands(int& opnd1, int& opnd2)
{
if (S.StackEmpty()) // 檢查棧是否空
{
cerr << "Missing operand!" << endl;
return False;
}
opnd1 = S.Pop(); // 將右操作數彈出棧
if (S.StackEmpty()) // 檢查棧是否空
{
cerr << "Missing operand!" << endl;
return False;
}
opnd2 = S.Pop(); // 將左操作數彈出棧
return True;
}
void Calculator::Compute(char op) // 執行運算
{
Boolean result;
int operand1, operand2;
result = GetTwoOperands(operand1, operand2); // 將兩個操作數彈出棧
if (result == True) // 如果成功,執行運算并將運算結果壓入棧
{
switch(op)
{
case '+': S.Push(operand2+operand1);
break;
case '-': S.Push(operand2-operand1);
break;
case '*': S.Push(operand2*operand1);
break;
case '/': if (operand1 == 0) //檢查除數是否為0
{
cerr << "Divide by 0!" << endl;
S.ClearStack(); //除數為0時清空棧
}
else
S.Push(operand2/operand1);
break;
case '^': S.Push(pow(operand2,operand1));
break;
}
cout<<'='<<S.Peek()<<' '; //輸出本次運算結果
}
else
S.ClearStack(); // 操作數不夠,清空棧
}
Calculator::Calculator(void) //構造函數
{}
void Calculator::Run(void) // 讀入并處理后綴表達式
{
char c[20];
while(cin >> c, *c != 'q') // 讀入表達式,遇'q'結束
switch(*c)
{
case 'c': S.ClearStack(); //遇'c'清空操作數棧
break;
case '-': //遇'-'需判斷是減號還是負號
if (strlen(c)>1) //若字符串長度>1,說明讀到的是負數的負號
Enter(atoi(c)); //將字符串轉換為整數,壓入棧
else
Compute(*c); //若是減號則執行計算
break;
case '+': // 遇到其它操作符時
case '*':
case '/':
case '^':
Compute(*c); //執行計算
break;
default: // 若讀入的是操作數,轉換為整型后壓入棧
Enter(atoi(c));
break;
}
}
void Calculator::Clear(void) // 清空操作數棧
{ S.ClearStack(); }
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -