boolcompute(vector<char> s,int &res) //计算后缀表达式的值,vector<char>s为字符型的动态数组的后缀表达式
{
inti = 0,num; //
intlen = s.size(); //len为后缀表达式的长度
stack<int>stk; //存放后缀表达式计算的结果
while(i< len)
{
if(s[i] == ' ') //如果读入的字符为空格,就跳到下一个字符
{
i++;
continue;
}
if(s[i] >= '0' && s[i] <= '9') //如果读入的字符为“0”到“9”
{
num= 0;
while(s[i]>= '0' && s[i] <= '9')
{
num= num * 10 + s[i] - '0';
i++;
}
stk.push(num); //把读入的数字字符压入栈中
}
else //既不是空格,也不是数字字符,那就是操作符了
{
if(stk.empty()) //如果栈还是空的话,返回错误
returnfalse;
inta = stk.top(); stk.pop();
if(stk.empty())
returnfalse;
intb = stk.top(); stk.pop(); //用a,b把刚读入的两个数字弹出栈
switch(s[i])
{
case'+':
stk.push(b+a);
break;
case'-':
stk.push(b-a);
break;
case'*':
stk.push(b*a);
break;
case'/':
stk.push(b/a);
break;
}
i++; //继续读入下一个字符
}
}
if(stk.empty()) //如果此时栈是空的,就是错误的
returnfalse;
res= stk.top(); stk.pop(); //将栈中的结果弹出来
if(!stk.empty()) //如果此时的栈为非空的话,就是错误的
returnfalse;
returntrue;
}
联系客服