-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」という式では機能しません。「^3^45」であるはずの「^^345」が表示され続けます。

私のアルゴリズムは間違っていますか?それとも、これは ICP と ISP に関係があるのでしょうか (彼女が私にくれたコードでは、どちらも "^" = 3 です)。

4

1 に答える 1

-2

解決しました。私の教授は ^ = 3 の isp と ^ = 3 の icp をコーディングしていましたが、私が isp を 4 に変更すると動作し始めました。私はこれを私の教授と一緒に取り上げます。

于 2016-09-28T21:36:36.850 に答える