前綴表達式

 

#include "iostream"
#include "arrStack.h"                                                          //用到了上篇文章定義的順序棧模板

using namespace std;

double fun(double x,double y,char op)
{
switch(op)
{
case '+':
   return x+y;
case '-':
   return x-y;
case '*':
   return x*y;
case '/':
   return x/y;
}
}


int main()
{
    const int size=50;

    //arrStack<double> result(size);                         //開始計劃使用兩個棧,現在只使用一個num棧來
arrStack<double> num(size);
    cout<<"請輸入後綴表達式(必須以數字開頭,以等號結尾,數字與數字以及數字與運算符間必須譯空格隔開):"<<endl;
    char ep[50];                                             //表達式expression
    cin.getline(ep,50);
    int i=0;
int count=0;                                              //技術控制
int control=0;                                            //控制變量,控制運算符後面空格的輸出。
    while(ep[i])
    {
    // int count=0;
     if(ep[i]!=' ')
     {
      if(ep[i]>='0'&&ep[i]<='9')
      {
       num.push(ep[i]-'0');
       count++;
      }
      if(ep[i]=='+'||ep[i]=='-'||ep[i]=='*'||ep[i]=='/')
      {
       double num1;
       //result.pop(num1);
     num.pop(num1);
       double num2;
       //result.pop(num2);
     num.pop(num2);
       double tmp=fun(num2,num1,ep[i]);
       num.push(tmp);
     //result.push(tmp);
     control=1;
      }
      if(ep[i]=='=')
      {
       double tmp;
       //result.pop(tmp);
     num.pop(tmp);
       cout<<ep<<tmp<<endl;
      }
      }
      else
     {
    if(control==0)
    {
     double tmp;
       double tmpNum;
       //for(double k=0;k<count;k++)
          //{
       // double tmpNum;
       // num.pop(tmpNum);
          // tmp+=tmpNum*pow(10,k);
          //}
                if(count==1)
       {
        num.pop(tmpNum);
        tmp=tmpNum;
       }
       else
       {
                    num.pop(tmpNum);
        tmp=tmpNum;
      for(int i=1;i<count;i++)
        {
         int j=i;                                           
       num.pop(tmpNum);
       //while(i--)                                //錯誤地方,以後注意。
         while(j--)
            {
             tmpNum*=10;
            }
         tmp+=tmpNum;
        }
       }
       num.push(tmp);
       //result.push(tmp);
          count=0;
    }
    else
    {
     control=0;
    }
     }
   i++;
   //cout<<"result:";
   //result.print();
   cout<<"num:";
   num.print();
   cout<<endl;
    }
return 0;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章