如何将“^”运算符添加到此中缀到前缀转换,中缀到后缀转换

时间:2013-10-01 14:17:06

标签: java

你能解释我怎么加?

我的中缀是:1^2+3/3

前缀表达式为:+1^2/33错误

后缀表达式为:1^233/+错误

前缀将是:+^12/33

和后缀将是:12^33/+

我的代码:

import java.io.*;
class Stack
{
    private char[] a;
    private int top,m;
    public Stack(int max)
    {
        m=max;
        a=new char[m];
        top=-1;
    }
    public void push(char key)
    {
        a[++top]=key;
    }
    public char pop()
    {
        return(a[top--]);
    }
    public char peek()
    {
        return(a[top]);
    }
    public boolean isEmpty()
    {
        return (top==-1);
    }
}

class Evaluation
{
    private Stack s;
    private String input;
    private String output="";
    public Evaluation(String str)
    {
        input=str;
        s=new Stack(str.length());
    }

    public String inToPre()
    {
        for(int i=input.length()-1;i>=0;i--)
        {
            char ch=input.charAt(i);
            **switch(ch)
            {
            case '+':
            case '-':gotOperator(ch,1,')');
            break;
            case '*':
            case '/':gotOperator(ch,2,')');
            break;
            case ')':s.push(ch);
            break;
            case '(':gotParenthesis(')');
            break;
            default:output=ch+output;
            }
        }
        while(!s.isEmpty())
            output=s.pop()+output;
        return output;
    } // End to inToPre

    public String inToPost()
    {
        for(int i=0;i<input.length();i++)
        {
            char ch=input.charAt(i);
            switch(ch)
            {
            case '+':
            case '-':gotOperator(ch,1,'(');
            break;
            case '*':
            case '/':gotOperator(ch,2,'(');
            break;
            case '(':s.push(ch);
            break;
            case ')':gotParenthesis('(');
            break;
            default:output=output+ch;
            }
        }
        while(!s.isEmpty())
            output=output+s.pop();
        return output;
    } // End inToPost**

    private void gotOperator(char opThis,int prec1,char x)
    {
        while(!s.isEmpty())
        {
            char opTop=s.pop();
            if(opTop==x)
            {
                s.push(opTop);
                break;
            }
            else
            {
                int prec2;
                if(opTop=='+'||opTop=='-')
                    prec2=1;
                else
                    prec2=2;
                if(prec2<prec1&&x=='(')
                {
                    s.push(opTop);
                    break;
                }
                else if(prec2<=prec1&&x==')')
                {
                    s.push(opTop);
                    break;
                }
                else
                {
                    if(x==')')
                        output=opTop+output;
                    else
                        output=output+opTop;
                }
            }
        } // End While gotOperator
        s.push(opThis);
    } // End gotOperator

    private void gotParenthesis(char x)
    {
        while(!s.isEmpty())
        {
            char ch=s.pop();
            if(ch==x)
                break;
            else
            {
                if(x==')')
                    output=ch+output;
                else
                    output=output+ch;
            } // End Else
        } // End While gotParenthesis
    } // End gotParenthesis
} // End Class Evaluation

1 个答案:

答案 0 :(得分:1)

快速查看代码我可以看到在InFix分析中你没有考虑^运算符的新级别。

组应为+ - ,* /,^。由于^具有更高的优先级。

问候