Obliczanie wartosci ONP. Zawieszanie programu

0

Podpowie ktoś w którym momencie w drugiej części programu jest jakis błąd? bo próbuje i próbuje ale zapętla sie i nie moge dojść w którym momencie.

#include <iostream>
#include <sstream>
#include <cstring>

using namespace std;

int main()
{
    ostringstream ss;
    char stos[256];
    int stos2[256];
    char el[256];
    int ws = 0,dl;


    do
    {
        cin >> el;

        if(el[0] >= '0' && el[0] <= '9') ss << el << " ";
        else
            switch(el[0])
            {
                case '+': ;
                case '-': while(ws && stos[ws - 1] != '(') ss << stos[--ws] << " ";
                          stos[ws++] = el[0];
                          break;
                case '*': ;
                case '/': while(ws && stos[ws - 1] != '(' &&
                                      stos[ws - 1] != '+' &&
                                      stos[ws - 1] != '-') ss << stos[--ws] << " ";
                          stos[ws++] = el[0];
                          break;
                case '^': while(ws && stos[ws - 1] == '^') ss << stos[--ws] << " ";
                          stos[ws++] = el[0];
                          break;
                case '(': stos[ws++] = '(';
                          break;
                case ')': while(stos[ws - 1] != '(') ss << stos[--ws] << " ";
                          ws--;
                          break;
                case '=': while(ws) ss << stos[--ws] << " ";
                          ss<< "=";
                          break;
            }

    } while(el[0] != '=');



    cout<<ss.str().c_str();
    cout<<endl;

    //obliczanie ONP
    string x;
    x=ss.str().c_str();
    int ws2=0;
    cout<<"char"<<endl;
    char *el3=new char[x.length()+1];
    int a,b,w;

    do
    {
        strcpy(el3,x.c_str());

        if(el3[0] >= '0' && el3[0] <= '9')
        {
            a = b = 0;
            do a = 10 * a + el3[b++] - 48; while(el3[b]);
            stos2[ws2++] = a;
        }
        else if(el3[0] == '=') cout << stos2[--ws2] << endl;
        else
        {
            b = stos2[--ws2]; a = stos2[--ws2];

            switch(el3[0])
            {
                case '+': w = a + b; break;
                case '-': w = a - b; break;
                case '*': w = a * b; break;
                case '/': w = a / b; break;
                case '^': w = 1;
                          while(b--) w *= a;
                          break;
            }

            stos2[ws2++] = w;
        }
    } while(el3[0] != '=');

    return 0;
}
 
0

Narysuj sobie to na kartce, zrób całość bez buforowania w postaci napisu tylko za pomocą stosu na który odkładaj cale liczby (drugi stos powinien być dla liczb i znaków.
To co podałeś nadaje się wyłacznie do kosza.

1 użytkowników online, w tym zalogowanych: 0, gości: 1