#include <iostream>
#include <string>
#include <stack>
#include <sstream>
using namespace std;
stack<int>aStack;
stack<int>operand1;
stack<int>operand2;
stringstream postfix;
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] == '+')
{
operand1.push(aStack.top());
aStack.pop();
operand2.push(aStack.top());
aStack.pop();
int x = operand1.top() - 48;
int y = operand2.top() - 48;
int result = x + y;
aStack.push(result);
}
else if(ch[i] == '*')
{
operand1.push(aStack.top());
aStack.pop();
operand2.push(aStack.top());
aStack.pop();
int x = operand1.top() - 48;
int y = operand2.top() - 48;
int result = x * y;
aStack.push(result);
}
}
postfix << aStack.top();
return postfix;
}
int main()
{
string postfix = "32+2*";
stringstream * result = &postfixExp(postfix);
cout << result-> str() ;
return 0;
}
こんにちは、上記のコードの何が問題なのか知っている人はいますか? 私のプログラムは、後置表記の値を返す必要があります。後置表記として「32+2*」と入力したところ、10 が返されるはずです。どうやら問題が発生しているようで、代わりに -86 が返されます。
エラーはこの特定のコードから発生していると思います
else if(ch[i] == '*')
{
operand1.push(aStack.top());
aStack.pop();
operand2.push(aStack.top());
aStack.pop();
int x = operand1.top() - 48;
int y = operand2.top() - 48;
int result = x * y;
aStack.push(result);
}
そこから、operand2 を表示すると、7 ではなく -43 が表示されます (前の加算 "34+" から派生)。
どの部分が間違っているか教えてください。オペランド 2 の値が 7 でないのはなぜですか。
ありがとうございました