问题描述:
输入一个只包含个位数字的简单四则运算表达式字符串,计算该表达式的值
注:
3.1、表达式只含 +, -, *, / 四则运算符,不含括号
3.2、表达式数值只包含个位整数(0-9),且不会出现0作为除数的情况
3.3、要考虑加减乘除按通常四则运算规定的计算优先级
3.4、除法用整数除法,即仅保留除法运算结果的整数部分。比如8/3=2。输入表达式保证无0作为除数情况发生
3.5、输入字符串一定是符合题意合法的表达式,其中只包括数字字符和四则运算符字符,除此之外不含其它任何字符,不会出现计算溢出情况
要求实现函数:
int calculate(int len,char *expStr)
#include <iostream>
#include <stack>
using namespace std;
int calculate(char *pstr)
{
if(pstr==NULL && *pstr=='\0')
return 0;
stack<int> num;
stack<char> op;
int x1,x2,value;
for(int i=0;pstr[i]!='\0';++i)
{
if( pstr[i] >='0' && pstr[i] <='9' )
{
num.push(pstr[i]-'0');
}
else if((pstr[i]=='*' || pstr[i]=='/') && !op.empty() && (op.top()=='+' || op.top()=='-') || op.empty() )
{
op.push(pstr[i]);
}
else
{
while( !((pstr[i]=='*' || pstr[i]=='/') && !op.empty() && (op.top()=='+' || op.top()=='-') || op.empty() ) )
{
x2=num.top();
num.pop();
x1=num.top();
num.pop();
switch(op.top())
{
case '*':
value=x1*x2;
break;
case '/':
if(x2==0)
return 0;
value=x1/x2;
break;
case '+':
value=x1+x2;
break;
case '-':
value=x1-x2;
break;
default:
break;
}
num.push(value);
op.pop();
}
op.push(pstr[i]);
}
}
while(!op.empty())
{
x2=num.top();
num.pop();
x1=num.top();
num.pop();
switch(op.top())
{
case '*':
value=x1*x2;
break;
case '/':
if(x2==0)
return 0;
value=x1/x2;
break;
case '+':
value=x1+x2;
break;
case '-':
value=x1-x2;
break;
default:
break;
}
num.push(value);
op.pop();
}
return num.top();
}
int main()
{
cout<<calculate("1+4*5-8/3")<<endl;
return 0;
}