-3

我有一个函数,它接受中缀表达式并将它们转换为前缀表达式。这是我的代码:

string infixToPrefix(string expression)
{   

  stack<char> S; //holds operators
  stack<char>output; //display like in class
  string prefix = "";
  char ch;
  S.push('#');

  for (int i = expression.length(); i > 0; i--){

    ch = expression[i];

    if (isOperand(ch) == true){
      output.push(ch);

    }
    else {
      if (ch == '('){
        while (S.top() !=  ')'){
          output.push(S.top());
          S.pop();
        }
      }

      else {
        while (isp(S.top()) > icp(ch)){

          output.push(S.top());
          S.pop();

        }
        S.push(ch);

      }
    }
  }

  while (S.top() != '#'){
      output.push(S.top());
      S.pop();

    }

  while (!output.empty()){
    if (output.top() == ')'){
      output.pop();
    }
    else{
    prefix.append(1,output.top());
    output.pop();
    }
  }
  return prefix;
}

此功能与教授希望我使用的示例表达式配合得很好;“3-4-5”产生“--345”,“5*(4/2)”产生“*5/42”。但是,这不适用于表达式“3^4^5”。它一直给我“^^345”,它应该是“^3^45”。

我的算法不正确吗?或者这可能与 ICP 和 ISP 有关(在她给我的代码中,两者都有“^”= 3。)?

4

1 回答 1

-2

解决了。我的教授将 ^ = 3 的 isp 和 ^ = 3 的 icp 编码,而当我将 isp 更改为 4 时,它开始工作。我会和我的教授讨论这个问题。

于 2016-09-28T21:36:36.850 回答