栈—— 表达式转换

来源:互联网 发布:图像分类算法matlab 编辑:程序博客网 时间:2024/06/01 08:57

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

输入格式:

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

输出格式:

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

输入样例:

2+3*(7-4)+8/4

输出样例:

2 3 7 4 - * + 8 4 / +
样例输入与输出:
序号输入输出12+3*(7-4)+8/42 3 7 4 - * + 8 4 / +2((2+3)*4-(8+2))/52 3 + 4 * 8 2 + - 5 /31314+25.5*121314 25.5 12 * +4-2*(+3)-2 3 *5123123
#include<bits/stdc++.h>using namespace std;int main(){    char a[25];    gets(a);    int tmp=0;    int flag=0;    stack<char> ch;    int i;    for(i=0;a[i]!='\0';i++)    {        char c=a[i];        if((c>='0'&&c<='9')||c=='.')        {            if(c>='0'&&c<='9')            {                if(tmp==0&&flag==0)                {                    cout<<c;    tmp=1;                }                else if((a[i-1]>='0'&&a[i-1]<='9')||a[i-1]=='.')     cout<<c;                else cout<<" "<<c;            }            else cout<<c;//c=='.',有非整数出现        }        else if(c=='+'||c=='-')        {            if(i==0||(!(a[i-1]>='0'&&a[i-1]<='9')&&a[i-1]!=')'))//运算数前有正负号            {                if(c=='-')                {                    if(i==0)    flag=1;                    else       cout<<" ";                    cout<<c<<a[i+1];    i++;                }            }            else            {                while(!ch.empty()&&ch.top()!='(')                {                    cout<<" "<<ch.top();                    ch.pop();                }                ch.push(c);            }        }        else if(c=='/'||c=='*')        {            if(ch.top()=='/'||ch.top()=='*')            {                while(!ch.top()=='(')                {                    cout<<" "<<ch.top();                    ch.pop();                }                ch.push(c);            }            else    ch.push(c);        }        else if(c=='(')        ch.push(c);        else if(c==')')        {            ch.push(c);            while(1)            {                if(ch.top()==')')   ch.pop();                if(ch.top()=='(')                {                    ch.pop();   break;                }                else                {                    cout<<" "<<ch.top();    ch.pop();                }            }        }    }    while(1)    {        if(ch.empty())  break;        if(ch.top()=='(')   ch.pop();        else        {            cout<<" "<<ch.top();    ch.pop();        }    }    return 0;}
阅读全文
0 0
原创粉丝点击