题意:只有非负整数,加,减,乘,除,括号,输入为算术字符串,输出为结果
int calculate(string ts)
{
string s;
int i=0,l,t=0,j,w,q;
char temp;
stack<int> numbers;
stack<char> operators;
int a[300];
for(i=0; i<ts.length(); i++) if(ts[i]!=' ') s+=ts[i];
a['+']=a['-']=1;
a['*']=a['/']=2;
a['#']=-1;
a['(']=-2;
s+='#';
l=s.length();
i=0;
while(i<l)
{
if(s[i]=='+'||s[i]=='-'||s[i]=='*'||s[i]=='/'||s[i]=='#')
{
while(!operators.empty()&&a[operators.top()]>=a[s[i]])
{
//要运算
temp=operators.top();
w=numbers.top();
numbers.pop();
q=numbers.top();
numbers.pop();
operators.pop();
if(temp=='+') numbers.push(w+q);
if(temp=='-') numbers.push(q-w);
if(temp=='*') numbers.push(w*q);
if(temp=='/') numbers.push(q/w);
}
operators.push(s[i]);
i++;
}
else if(s[i]=='(')
{
operators.push(s[i]);
i++;
}
else if(s[i]==')')
{
while(operators.top()!='(')
{
temp=operators.top();
w=numbers.top();
numbers.pop();
q=numbers.top();
numbers.pop();
operators.pop();
if(temp=='+') numbers.push(w+q);
if(temp=='-') numbers.push(q-w);
if(temp=='*') numbers.push(w*q);
if(temp=='/') numbers.push(q/w);
}
operators.pop();
i++;
}
else
{
while(s[i]>='0'&&s[i]<='9')
{
t=t*10+s[i]-'0';
i++;
}
numbers.push(t);
t=0;
}
}
return numbers.top();
}