利用STL计算后缀表达式

#include <iostream>
#include <stack>
using namespace std;

int main()
{
    stack<double> s;
    char ch;
    double result,left,right,operand,value;
    while(cin>>ch)
    {
        if(isdigit(ch))                 //判断输入的字符是否是0--9之间的数字
           {
               cin.putback(ch);       //遇到操作数,则将该字符放回输入流,因为要输入的操作数可能大于10,或者小数,得用double变量保存
               cin>>operand;          //用double变量保存操作数
               s.push(operand);        //操作数压栈
           }
        else {
                right=s.top();s.pop();left=s.top();s.pop();     //得栈顶元素,赋给右值(可能为减数或者除数),出栈;得栈顶元素,赋给左值,可能是被减数,被除数,出栈
            switch(ch)
              {
                 case '+':{value=left+right;break;}
                 case '-':{value=left-right;break;}
                 case '*':{value=left*right;break;}
                 case '/':{value=left/right;break;}
              }
              s.push(value);

        }

    }
    result=s.top();
    cout<<result<<endl;
    return 0;
}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要使用C++ STL中的栈来实现中缀表达式后缀表达式,可以按照以下步骤进行: 1. 创建一个空的栈,用于存储运算符。 2. 遍历中缀表达式的每个字符: - 如果是操作数(数字),直接将其输出到后缀表达式。 - 如果是左括号 '(',将其推入栈中。 - 如果是右括号 ')',则将栈中的运算符依次弹出并输出到后缀表达式,直到遇到左括号 '('。注意:左括号 '('不输出到后缀表达式,也不入栈。 - 如果是运算符 (+, -, *, /, ^),则: - 如果栈为空,或者栈顶元素为左括号 '(',则将运算符推入栈中。 - 否则,比较当前运算符与栈顶运算符的优先级。如果当前运算符的优先级小于或等于栈顶运算符的优先级,则将栈顶运算符弹出并输出到后缀表达式,直到栈为空或者栈顶运算符为左括号 '(',然后将当前运算符推入栈中。 3. 遍历完中缀表达式后,如果栈中还有运算符,依次弹出并输出到后缀表达式。 下面是一个用C++ STL中的栈实现中缀转后缀的示例代码: ```cpp #include <iostream> #include <stack> #include <string> int getPriority(char op) { if (op == '+' || op == '-') return 1; else if (op == '*' || op == '/') return 2; else if (op == '^') return 3; else return 0; } std::string infixToPostfix(const std::string& infix) { std::stack<char> opStack; std::string postfix; for (char ch : infix) { if (isdigit(ch)) { postfix += ch; } else if (ch == '(') { opStack.push(ch); } else if (ch == ')') { while (!opStack.empty() && opStack.top() != '(') { postfix += opStack.top(); opStack.pop(); } if (!opStack.empty() && opStack.top() == '(') { opStack.pop(); } } else { while (!opStack.empty() && getPriority(ch) <= getPriority(opStack.top())) { postfix += opStack.top(); opStack.pop(); } opStack.push(ch); } } while (!opStack.empty()) { postfix += opStack.top(); opStack.pop(); } return postfix; } int main() { std::string infix = "5 + 2 * (3 - 1)"; std::string postfix = infixToPostfix(infix); std::cout << "Infix expression: " << infix << std::endl; std::cout << "Postfix expression: " << postfix << std::endl; return 0; } ``` 在上述示例中,我们定义了一个`getPriority`函数来获取运算符的优先级。`infixToPostfix`函数使用一个循环来遍历中缀表达式的每个字符,并根据字符的类型执行相应的操作。最后,我们通过调用`infixToPostfix`函数将中缀表达式转换为后缀表达式,并输出结果。 希望这个示例能帮助你理解如何使用C++ STL中的栈来实现中缀表达式后缀表达式

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值