1

我使用了一个子程序来区分运算符的优先级:

static int  p(char c){
    if ((c=='+') || (c=='-')) {
        return 0;
    }
    else if ((c=='/') || (c=='*')) {
        return 1;
    }
    else {
        return -1;
    } 
}

我对代码做了一些工作。我应该遵循这种转变:转变。对于 i=1 到 m 如果 c_i 是操作数:将 c_i 传输到输出。

如果 c_i 是左括号:将 c_i 推到 temp。

如果 c_i 是右括号:从 temp 中弹出元素并将它们传输到输出,直到遇到左括号。弹出左括号。

如果 c_i 是一个运算符:让顶部的临时元素为 t。将元素从 temp 弹出并传输到输出,直到:p(t) < p(c_i) 或

t 是左括号或

温度为空。

将 c_i 推到温度。

将 temp 中的剩余元素传输到输出。

问题: 1-如果数字是运算符,我基本上被卡住了如何继续。我坚持上面列表中的第 3 步和第 4 步。2-带有两个星号的部分是我不知道该怎么做的地方!

该程序应将中缀转换为后缀。从 ((3 + 5 1)=8) 14 到 3 5 1 +8 = 14。

提前致谢!

备注和符号: -pop 操作在每次应用时删除字符串的第一个元素。字符串的顶部元素是字符串的第一个元素。push 操作在字符串的开头追加一个元素。

- 如果需要,您可以使用 Integer:parseInt(s) 和 Character:getNumericV alue(c) 方法将字符串 s 和字符 c 转换为整数值。

- 不允许使用字符串以外的数据结构来操作表达式。

static String infixToPostfix(String infix){
String postfix = "";
infix = readLine();
String temp ="";
char t;




for (int i=0 ; i<infix.length(); i++) {
    t = temp.charAt(0);
    if (infix.charAt(i)  !=')' && infix.charAt(i)!= '(' && infix.charAt(i)!= p(infix.charAt(i)))
        postfix += infix.charAt(i);


    if (infix.charAt(i) == '+') {


        while (  (p('+') <= p(t)) && (t  != '(')  && (!temp.equals("") )  ){ 

        }
        postfix = postfix + temp.charAt(i);
    }


     if (infix.charAt(i) == '-') {
    while (  (p('-') <= p(t)) && (t  != '(')  && (!temp.equals("") )  ){ 
        postfix = postfix + temp.charAt(i);


        }

    }

    else  if (infix.charAt(i) == '*') {
        while (  (p('*') <= p(t)) && (t  != '(')  && (!temp.equals("") )  ){ 
            postfix = postfix + temp.charAt(i);
    }}     
      ***if (infix.charAt(i) == '/') {
        while (  (p('/') <= p(t)) && (t  != '(')  && (!temp.equals("") )  ){ 
            postfix = postfix + temp.charAt(i);
   }}    

      if (infix.charAt(i) == '(') {
        temp = infix.charAt(i)+temp;
   }

    if (infix.charAt(i) == ')') {
        infix = temp;***

        }

}


        return postfix;
}
4

0 回答 0