PTA 表达式转换

318 阅读1分钟

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

输入格式:

输入在一行中给出不含空格的中缀表达式,可包含+-*、``以及左右括号(),表达式不超过20个字符。

输出格式:

在一行中输出转换后的后缀表达式,要求不同对象(运算数、运算符号)之间以空格分隔,但结尾不得有多余空格。

输入样例:

2+3*(7-4)+8/4
结尾无空行

输出样例:

2 3 7 4 - * + 8 4 / +
结尾无空行

代码:

# include <iostream>
using namespace std;

char stack[100],a[100],b[100];
int t1=-1,t2=-1;


char Pop( char c)
{
    if( c == 'D')
        return '/';
    if( c == 'C')
        return '*';
    if( c == 'B')
        return '+';
    if( c == 'A')
        return '-';
}

void Compare(char c)
{
    if( c == ')')
    {
        while(stack[t1] != '(' && t1 != -1)
        {
            b[++t2] = Pop(stack[t1]);
            b[++t2] = ' ';
            stack[t1--] = '\0';
        }
        stack[t1--] = '\0';
    }
    else
    {
        while(stack[t1] >= c && stack[t1] != '(' && t1 != -1)
        {
            b[++t2] = Pop(stack[t1]);
            b[++t2] = ' ';
            stack[t1--] = '\0';
        }
        stack[++t1] = c;
    }
}

int main()
{
    cin >> a;
    for(int i = 0 ; a[i] != '\0' ; i++)
    {
        if(a[i] == '(')
            stack[++t1] = a[i];
        else if (a[i] == '-' && (i == 0 || a[i - 1] == '('))
            b[++t2] = a[i];
        else if (a[i] == '+' && (i == 0 || a[i - 1] == '('))
            continue;
        else if (a[i] == '-' && i !=0 && a[i - 1] != '(')
            Compare('A');
        else if (a[i] == '+' && i != 0 && a[i - 1] != '(')
            Compare('B');
        else if (a[i] == '*')
            Compare('C');
        else if (a[i] == '/')
            Compare('D');
        else if (a[i] == ')')
            Compare(')');
        else{
            b[++t2] = a[i];
            if (a[i + 1] == '+' || a[i + 1] == '-' || a[i + 1] == '*'
                || a[i + 1] == '/' || a[i + 1] == '(' || a[i + 1] == ')' || a[i + 1] == '\0')
                b[++t2] = ' ';
        }
    }
    while (t1 != -1)
    {
        b[++t2] = Pop(stack[t1--]);
        b[++t2] = ' ';
    }
    if(b[t2] == ' ')
        b[t2--] = '\0';
    cout << b;
    return 0;
}

提交结果 :

3.png