⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fickyou.h

📁 表达式算法,console程序
💻 H
字号:

#include<iostream>
using namespace std;

template<class T>
class Stack {
public:
     Stack(int MaxStackSize=10);
     ~Stack(){delete [] stack1;}
      bool IsEmpty()const {return top==-1;}
      bool IsFull()const{return top==MaxTop;} 
      T Top()const;
      Stack<T>& Add(const T& x);
      Stack<T>& Pop(T& x);
private:
      int top;  
      int MaxTop;   
	  T* stack1;    
 };

template<class T>
Stack<T>::Stack(int MaxStackSize)
{
       MaxTop=MaxStackSize-1;
       stack1=new T[MaxStackSize];
       top=-1;
}
template<class T>
T Stack<T>::Top()const
{
    if(!IsEmpty())
    return stack1[top];
}

template<class T>
Stack<T>&Stack<T>::Add(const T& x)
{
        if(!IsFull())
        stack1[++top]=x;
        return *this;
}

template<class T>
Stack<T>& Stack<T>::Pop(T& x)
{
           if(!IsEmpty())
           x=stack1[top--];
           return *this;
}

class calculator
{   
public:
      calculator() {}
      void Run( );   
	  void clear( );

      void AddOperand (double value) ;
      bool Get2Operands(double & left, double & right) ;
      void DoOperator (char op) ;
public:   Stack <double> s ;
 }; 
   
void calculator::AddOperand(double value)
{  
	s.Add(value);
}

bool calculator::Get2Operands(double &left,double &right)
 {  if (s.IsEmpty())
      {cerr<<"Missing Operand!"<<endl; return false;}
      s.Pop(right);
     if (s.IsEmpty())
      {cerr<<"Missing Operand!"<<endl; return false;}
      s.Pop(left);
     return true;
  }  
      
void calculator::DoOperator(char op)
{  double left, right;     bool  result;
    result = Get2Operands(left, right);
    if (result==true)
       switch (op)
	{      case '+' : s.Add(left + right) ; break;
           case '-' : s.Add(left - right) ; break;
           case '*' : s.Add(left * right) ; break;
           case '/' : /*if (right == 0.0)
                        {cerr << "divide by 0!" << endl; s.Clear( ); }
                        else*/ s.Add(left / right) ; break;
          // case '^' : s.Add(power(left, right)); break;
    }
    //else s.Clear ( );
}


void calculator::Run ()
 {  char ch;   double newoperand;
     while ( cin >>ch ,   ch != '#')
      {  switch (ch)
            { case '+': case '-': case '*': case '/': case '^':
                   DoOperator(ch);  break;
                default:  cin.putback(ch);
                          cin >> newoperand;
                          AddOperand(newoperand);
                               break;
           }
      }
}

/*void calculator::clear()
{  
	  s.MakeEmpty();
}*/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -