1. 程式人生 > >從鍵盤輸入一個表示式,試編寫演算法計算表示式的值。

從鍵盤輸入一個表示式,試編寫演算法計算表示式的值。

hanshu.h://運算子棧
#include <iostream>
#include <string>
using namespace std;
#include "Status.h"




typedef struct
{
char *base;
char *top;
int stacksize;
}SqStack;




int panduan(string ch)
{
if(ch=="+"||ch=="-"||ch=="*"||ch=="/"||ch=="("||ch==")"||ch=="#")
{

return ERROR;
}
else
{

return OK;
}
}


int InitStack(SqStack &S)
{
S.base = new char[MAXSIZE];
if(!S.base)
exit(OVERFLOW);
S.top = S.base;
S.stacksize = MAXSIZE;
return OK;
}


void StackTraverse(SqStack S)
{
char *p;
p=S.base;
while(p!=S.top)
{
cout<<*p++<<"  ";
}
cout<<endl;
}


int Push(SqStack &S,char e)
{
if(S.top-S.base == S.stacksize)
{
return ERROR;
}
*S.top = e;

S.top++;
return OK;
}






int Pop(SqStack &S,char &e)
{
if(S.top == S.base)
{
return ERROR;
}
S.top--;
e = *S.top;

return OK;
}




char GetTop(SqStack S,char e)
{
if(S.top == S.base)
exit(1);
e = *(--S.top);

return e;
}


char Precede(char e,char c)//優先順序的比較
{


if(e =='#')
{
return '<';
}
else
{

switch(c)
{
case '+':
if(e == '(')
return '<';
else
return '>';
break;
case '-':
if(e == '(')
return '<';
else
return '>';
break;
case '*':
if(e == '*' || e == '/')
return '>';
else
return '<';
break;
case '/':
if(e == '*'||e == '/')
return '>';
else 
return '<';
break;
case '(':
return '<';
break;
case ')':
if(e == '(')
return '=';
else
return '>';
break;

default:
cout<<"error1"<<endl;
}
}
}


double yunsuan(double a,char e,double b)
{

switch(e)
{
case '+':
return a+b;
break;
case '-':
return a-b;
break;
case '*':
return a*b;
break;
case '/':
if(b==0)
cout<<"error2"<<endl;
else
return a/b;
break;
}
}