//程序名:Compute.h
// 程序功能:
//
// 本程序仅支持正整数的四则混合运算中缀表达式
//
// 作者:吴雨羲
// 日期:2013.10.17
// 版本:1.0
// 修改内容:无
// 修改日期:
// 修改作者:
//
int Compute();
//程序名:算术表达式.cpp
// 程序功能:
//
// 本程序仅支持正整数的四则混合运算中缀表达式
//
// 作者:吴雨羲
// 日期:2013.10.17
// 版本:1.0
// 修改内容:无
// 修改日期:
// 修改作者:
//
#include<iostream>
#include"Compute.h"
using namespace std;
void main()
{
cout<<"结果是"<<Compute()<<endl;
}
//程序名:Compute.cpp
// 程序功能:
//
// 本程序仅支持正整数的四则混合运算中缀表达式
//
// 作者:吴雨羲
// 日期:2013.10.17
// 版本:1.0
// 修改内容:无
// 修改日期:
// 修改作者:
//
#include<iostream>
#include<ctype.h>
#include<stack>
using namespace std;
int Compute()
{
char chr[300];
cout<<"本程序仅支持正整数的四则混合运算"<<endl;
cout<<"输入算术表达式"<<endl;
cin>>chr;
int val1,val2,val;
stack<int> ist;
stack<char> cst;
char ch;
int i=0,start;
while(chr[i]!='\0')
{
switch(chr[i])
{
case '0': case '1': case '2':
case '3': case '4': case '5':
case '6': case '7': case '8':
case '9':
start=0;
while(isdigit(chr[i]))
{
start=start*10+(chr[i]-'0');
i++;
}
ist.push(start);
break;
case'(':
cst.push(chr[i]);
i++;
break;
case')':
ch=cst.top();
while(ch!='(')
{
cst.pop();
val1=ist.top();ist.pop();
val2=ist.top();ist.pop();
switch (ch)
{
case'+':
val=val2+val1;
break;
case'-':
val=val2-val1;
break;
case'*':
val=val2*val1;
break;
case'/':
val=(int)val2/val1;
break;
}
ch=cst.top();
ist.push(val);
}
cst.pop();
i++;
break;
case'+':
case'-':
if(cst.empty())
{
cst.push(chr[i]);
}
else
{
ch=cst.top();
switch(ch)
{
case'+':
cst.pop();
val1=ist.top();ist.pop();
val2=ist.top();ist.pop();
val=val2+val1;
ist.push(val);
cst.push(chr[i]);
break;
case'-':
cst.pop();
val1=ist.top();ist.pop();
val2=ist.top();ist.pop();
val=val2-val1;
ist.push(val);
cst.push(chr[i]);
break;
case'*':
cst.pop();
val1=ist.top();ist.pop();
val2=ist.top();ist.pop();
val=val2*val1;
ist.push(val);
cst.push(chr[i]);
break;
case'/':
cst.pop();
val1=ist.top();ist.pop();
val2=ist.top();ist.pop();
val=(int)val2/val1;
ist.push(val);
cst.push(chr[i]);
break;
case'(':
cst.push(chr[i]);
break;
}
}
i++;
break;
case'*':
case'/':
if(cst.empty())
{
cst.push(chr[i]);
}
else
{
ch=cst.top();
switch(ch)
{
case'+':
case'-':
cst.push(chr[i]);
break;
case'*':
cst.pop();
val1=ist.top();ist.pop();
val2=ist.top();ist.pop();
val=val2*val1;
ist.push(val);
cst.push(chr[i]);
break;
case'/':
cst.pop();
val1=ist.top();ist.pop();
val2=ist.top();ist.pop();
val=(int)val2/val1;
ist.push(val);
cst.push(chr[i]);
break;
case'(':
cst.push(chr[i]);
break;
}
}
i++;
break;
}
}
while(!cst.empty())
{
ch=cst.top();
cst.pop();
val1=ist.top();ist.pop();
val2=ist.top();ist.pop();
switch (ch)
{
case'+':
val=val2+val1;
break;
case'-':
val=val2-val1;
break;
case'*':
val=val2*val1;
break;
case'/':
val=(int)val2/val1;
break;
}
ist.push(val);
}
val=ist.top();
return val;
}