美文网首页
表达式转换

表达式转换

作者: 鹿与云与雨 | 来源:发表于2019-11-27 15:40 被阅读0次

算术表达式有前缀表示法、中缀表示法和后缀表示法等形式。日常使用的算术表达式是采用中缀表示法,即二元运算符位于两个运算数中间。请设计程序将中缀表达式转换为后缀表达式。

#include <iostream>
#include<stack>
#include<map>
using namespace std;
const int maxn = 1e4 + 10;
typedef long long ll;
stack<char> s;

int main() {
    map<char, int> mp;
    string str;
    cin >> str;
    bool test = true;
    mp['-'] = 1, mp['+'] = 1;
    mp['*'] = 2, mp['/'] = 2;
    mp['('] = 3, mp[')'] = 3;
    for (int i = 0; i < str.size(); i++)
    {
        if (((i == 0 || str[i - 1] == '(') && (str[i] == '+' || str[i] == '-')) || (str[i] >= '0' && str[i] <= '9') || (str[i] == '.'))       
        {
            if (!test)         //正常
            {
                cout << " ";
            }
            if (str[i] != '+')
            {
                cout << str[i];
            }
            while (str[i + 1] == '.' || (str[i + 1] >= '0' && str[i + 1] <= '9'))
            {
                i++;
                cout << str[i];
            }
            test = false;
        }
        else {
            if (str[i] == ')')
            {
                while (!s.empty() && s.top() != '(')
                {
                    cout << ' ' << s.top();
                    s.pop();
                }
                s.pop();
            }
            else if (s.empty() || mp[str[i]] > mp[s.top()])
            {
                s.push(str[i]);
            }
            else {
                while (!s.empty() && s.top() != '(')

                {
                    cout << ' ' << s.top();
                    s.pop();
                }
                s.push(str[i]);
            }
        }
    }
    while (!s.empty()) 
    {
        cout << ' ' << s.top();
        s.pop();
    }
    return 0;
}

相关文章

  • 表达式树

    表达式树中缀表达式转换为后缀表达式后缀表达式总结

  • 各种表达式之间的转换(手工)

    根据运算符的位置 把a,b 不看作操作数,看作表达式 把中缀表达式 转换为 前缀表达式 把要转换的表达式 每一个子...

  • Go语言学习(6) - 数据类型转换和常量以及iota

    数据类型转换的格式 1.T(表达式) 采用数据类型前置加括号的方式进行类型转换。T表示要转换的类型;表达式包括变量...

  • SQL Server 2016 函数:UPPER、LOWER

    UPPER 返回小写字符数据转换为大写的字符表达式 LOWER 返回大写字符数据转换为小写的字符表达式

  • C++类型转换

    隐式类型转换: C++的隐式转换发生在以下四种情况: 在混合类型的算术表达式中。 在表达式赋值中。 表达式传给函数...

  • 2018-08-03 python学习re模块方法

    1.compile(正则字符串) 将正则表达式字符串转换成正则表达式对象 转换成正则表达式对象后,可以通过对象调用...

  • Java零基础自学DAY10 2018-03-22

    Java 8 新增的lambda表达式 Lambda 转换: Lambda表达式组成: 形参列表 箭头 ( ->)...

  • flow中文文档(十)

    类型转换表达式 类型断言 铸造类型 类型铸造 类型转换表达式 有时候,断言类型而不用函数或变量这样做是有用的。对于...

  • R函数学习-eval()和parse()

    parse()函数能将字符串转换为表达式expression;eval()函数能对表达式求解

  • Go语言之数据类型转换十

    Go 语言使用类型前置加括号的方式进行类型转换,一般格式如下:T(表达式)其中,T 代表要转换的类型。表达式包括变...

网友评论

      本文标题:表达式转换

      本文链接:https://www.haomeiwen.com/subject/xpipwctx.html