我发个 大家帮忙看下哦~~~~~~~~~这也是我们课程设计的题目
#include <iostream>
using namespace std;
class Calculator
{
public:
Calculator() {STop=0;NTop=0;SignTemp=NULL;NumTemp=0;}
void compute(); //计算函数
void getcal() {cin>>cal;} //获取表达式
void Run(); //运行函数 其中有对优先级的考虑
private:
char cal[200]; //保存表达式的数组
char Sign[100],SignTemp;
double Num[100],NumTemp; //用两个数组分别存放运算符和数字,用声明相对应的2个临时变量
int STop,NTop;
};
void Calculator::compute()//对数字栈的上面两个数字 和 运算符栈的第一个运算符进行运算
{
switch (Sign[STop-1])
{
case '+':
Num[NTop-2]+=Num[NTop-1];//运算后将结果存入
STop--;NTop--;break;
case '-':
Num[NTop-2]-=Num[NTop-1];
STop--;NTop--;break;
case '*':
Num[NTop-2]*=Num[NTop-1];
STop--;NTop--;break;
case '/'://判断除数是否为0,0的话结束
if (Num[STop-1]==0)
{cout<<"data error!!"<<endl; exit(0);}
else
{Num[NTop-2]/=Num[NTop-1];
STop--;NTop--;break; } //其中STop--;NTop--;实现的是将数据弹出栈
case ')':
STop=STop-2;break;//发现')'对上个运算符进行判断
}
}
void Calculator::Run()//运行函数
{
const int length(strlen(cal));
char temp;
int p=0;
while (p<=length)//读入数据
{
temp=cal[p];
if (temp>='0' && temp<='9')
NumTemp=NumTemp*10+double(temp-48); //对数字的处理,其中的NumTemp*10实现对多位数的一起保存
else
{
Sign[STop]=SignTemp;
SignTemp=temp;
STop++; //运算符入栈
if (Sign[STop-1]!=')' && temp!='(')
{
Num[NTop]=NumTemp;
NTop++; NumTemp=0;}//数字入栈
switch (temp) //进行有关运算优先级别的考虑
{
case '+':
case '-':
while(Sign[STop-1]!='(' && STop-1>0)
compute();
break;//"+""-"的时候考虑"("
case '*':
case '/':
while( Sign[STop-1]!='(' && Sign[STop-1]!='+' && Sign[STop-1]!='-'&& STop-1>0 )
compute();
break;
case '(':
break;//继续读取
case ')':
while(Sign[STop-1]!='(') compute();
break;
default:
while(STop-1>0) compute();//只要里面有运算符号就继续算
cout<<Num[0]<<endl;
exit(0);//结束
}
}p++;
}
}
void main()
{
Calculator Ca;
Ca.getcal();
Ca.Run();
}