0
    #include <iostream>
    #include <stack>
    #include <string>
    #include <sstream>

    using namespace std;

    stack<char> aStack;
    stringstream result;
    stack<char> operand1;
    stack<char> operand2;


    stringstream &postfixExp(string ch){
      for(int i =0; i< ch.length(); i++)
      {
        if(ch[i]== '1' || ch[i]== '2' || ch[i]== '3' || ch[i]== '4' || ch[i]== '5' || ch[i]== '6' || ch[i]== '7' || ch[i]== '8' || ch[i]== '9' || ch[i]== '0' )
        {
          aStack.push(ch[i]);
        }

        else if( ch[i]== '+')
        {
          operand2.push(aStack.top());
          aStack.pop();

          operand1.push(aStack.top());
          aStack.pop();

      result << ( operand1.top() + operand1.top());
    }

  }

  return result;
}

int main()
{
    string postfix = " 2+3";

    stringstream* answer = &postfixExp(postfix);
    cout << "Result = " << answer->str() << endl;;


  return 0;
}

こんにちは、私のコードのどこが悪いのか誰か知っていますか? コンパイラからのエラー メッセージは表示されません。ただし、実行するとクラッシュします。

関数から得た結果を表示するのに苦労しています。当初はスタック関数を使いたかったのですが、メイン関数に値を渡して表示する方法が思いつきませんでした。

次に、代わりに stringstream 関数を使用することを考えています。残念ながら、対応する結果を表示する方法がまだわかりません

私のコードのどの部分が間違っているのか、または stringstream または stack を使用する以外に関数からの結果を表示するためのより良い方法があるかどうか、誰かが教えてくれますか?

どうもありがとう!

4

2 に答える 2

0

後置算術演算のテスト入力は、「2+3」ではなく「23+」の形式にする必要があります。

他の人が述べたように、空のスタックからポップしないようにするために、おそらくいくつかのチェックを追加する必要があります。

于 2013-09-23T19:58:46.257 に答える