プログラムは、数値と演算子で構成される後置式を読み取り、結果を計算する必要があります。使用してみstring
ますが、結果が得られません。私が間違っていることを教えてください。
#include <iostream>
#include "StackADT.h"
#include <stack>
using namespace std;
#include <string>;
bool isOperator(string);
int calculate (int, char, int);
void display (int, string, int, int);
int main(){
string expr;
int operand2 = 0;
int operand1 = 0;
string thisOperator;
int value;
int result;
cout << "Evaluates a postfix expression(to Quit)." << endl;
cin >> expr;
//while(expr != "-1")
{
//getline( cin, expr,'\n' );
int exprSize = expr.size();
const int siz = 10;
char expr2[siz];
for (int i = 0; i < expr.length; i++)
{
expr2[i] = expr[i];
}
Stack<int> stack;
int index = 0;
while (index < exprSize){
if (!isOperator(expr[index]) )
{
stack.pushStack(expr[index]);
}
else
{
stack.popStack (operand2);
stack.popStack (operand1);
thisOperator = expr[index];
value = calculate (operand1, thisOperator[index], operand2);
stack.pushStack(value);
}
index++;
}
result = stack.popStack (operand1);
display(operand1, thisOperator, operand2, result );
// cout << "Evaluates a postfix expression(to Quit)." << endl;
// cin >> expr;
}
system("pause");
return 0;
}
void display (int op1, string operat, int op2, int result){
cout << op1 << operat << op2 << " = " << result;
}
bool isOperator(char token )
{
if(token == '-' || token == '+' || token == '*' || token == '/')
return true;
else
return false;
}
int calculate (int op1, char operat, int op2){
switch (operat)
{
case '/': return op1 / op2;
break;
case '+': return op1 + op2;
break;
case '*': return op1 * op2;
break;
case '-': return op1 - op2;
break;
default: cout << "Cant / by zero" << endl;
break;
}
}
私はこれに取り組んでいます。exprSize = 文字列の長さ
- createStack (スタック)
- インデックス = 0
- ループ (インデックス < exprSize)
- if (expr[index] はオペランド)
- pushStack (スタック、expr[インデックス])
- else // expr[index] は演算子です
- popStack (スタック、オペランド 2)
- popStack (スタック、operand1)
- 演算子 = expr[インデックス]
- 値 = 計算 (オペランド 1、演算子、オペランド 2)
- pushStack (スタック、値)
- 終了する場合
- インデックス = インデックス + 1
- if (expr[index] はオペランド)
- エンドループ
- popStack (スタック、結果)
- リターン(結果)