0

プログラムは、数値と演算子で構成される後置式を読み取り、結果を計算する必要があります。使用してみ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 = 文字列の長さ

  1. createStack (スタック)
  2. インデックス = 0
  3. ループ (インデックス < exprSize)
    1. if (expr[index] はオペランド)
      1. pushStack (スタック、expr[インデックス])
    2. else // expr[index] は演算子です
      1. popStack (スタック、オペランド 2)
      2. popStack (スタック、operand1)
      3. 演算子 = expr[インデックス]
      4. 値 = 計算 (オペランド 1、演算子、オペランド 2)
      5. pushStack (スタック、値)
    3. 終了する場合
    4. インデックス = インデックス + 1
  4. エンドループ
  5. popStack (スタック、結果)
  6. リターン(結果)
4

0 に答える 0