infix2postfix

本文介绍了一种使用栈数据结构将中缀表达式转换为后缀表达式(逆波兰表示法)的方法。通过分析输入的数学表达式,该程序能够正确处理括号、乘除加减运算符以及指数运算。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

int main()
{
    stack<char> s; // use a stack to store the character of the equation
    string equation; // store the whole equation
    getline (cin, equation);
    int cur = 0; // the current position in the equation

    while (cur < equation.size())
    {
        while (equation[cur] == ' ')
            cur++;

        if (equation[cur] >= 'a' && equation[cur] <= 'z')
            cout<< equation[cur] << " ";

        else if (equation[cur] == ')')
        {
            while(!s.empty() && s.top() != '(') // if equation[cur] equals ')', then pop out all the character until '('
            {
                cout<< s.top() << " ";
                s.pop();
            }
            s.pop(); // pop out the '('
        }   

        else if (equation[cur] == '(') // '(' has the highest priority, put it into the stack directly
            s.push(equation[cur]); 

        else if (equation[cur] == '^')  // '^' has the highest priority except for the parenthesis
            s.push(equation[cur]); 

        else if (equation[cur] == '*' || equation[cur] == '/') //
        {
            while(!s.empty() && s.top() != '+'&& s.top() != '-' && s.top() != '(') //'*' and '/' have the same priority
            {
                cout<< s.top() << " "; 
                s.pop();
            }
            s.push(equation[cur]);
        }

        else if (equation[cur] == '+' || equation[cur] == '-') //'+' and '-' have the same priority
        {
            while(!s.empty() && s.top() != '(' )
            {
                cout<< s.top() << " ";
                s.pop();
            }
            s.push(equation[cur]); 
        } 

    cur++; // to process the next character
    }

    while (!s.empty())
    {
        cout << s.top() << " ";
        s.pop();
    }
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值