stack用于运算符的运算

// stack 的实现
void evaluate_stack_tops(stack<double> & numbers,stack<char> & operations);
double read_and_evaluate(istream & ins)
{
 const char DECIMAL = '.';
 const char RIGHT_PARENTHESIS = ')';
 stack<double> numbers;
 stack<char> operations;
 double number;
 char symbol;
 while (ins && ins.peek()!='\n')
 {
  if (isdigit(ins.peek()) || (ins.peek() == DECIMAL))
  {

   ins>>number;
   numbers.push(number);
  }
  else if(strchr("+ - * /",ins.peek())!=NULL)
  {
   ins>>symbol;
   operations.push(symbol);
  }
  else if (ins.peek()==RIGHT_PARENTHESIS)
  {
   ins.ignore();
   evaluate_stack_tops(numbers,operations);
  }
  else
  {
   ins.ignore();
  }
 }
 return numbers.top();
}
//符号运算
void evaluate_stack_tops(stack<double> & numbers,stack<char> & operations)
{
 double operand1,operand2;
 operand2=numbers.top();
 numbers.pop();
 operand1=numbers.top();
 numbers.pop();
 switch (operations.top())
 {
  case '+':numbers.push(operand1+operand2);
   break;
  case '-':numbers.push(operand1-operand2);
   break;
  case '*':numbers.push(operand1*operand2);
   break;
  case '/':numbers.push(operand1/operand2);
   break;
 }
 operations.pop();
}
//调用实施
int main ()
{
 double answer;
 cout<<"Type a fully parenthesized arithmetic expression: "<<endl;
 answer= read_and_evaluate(cin);
 cout<<"That evaluates to "<<answer<<endl;
 return;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值