Zapisywanie wyniku ze stosu do zmiennej

0

Witam mam serdeczna, bardzo pilna prośbe. Jestem w du.. z programowania. I mam napisac program mniejsza o to jaki chce tylko kawałek, malutki tyci tyci waszej pomocnej dłoni. Mam taki kod. Jest to przeksztalcanie z normalnego dzialania na ONP. i chce zeby cały wynik ONP przypisac do nowej zmiennej, tablicy char czy czekogolwiek bo musze potem z tego wartosc obliczyc wiem jak to obliczyc ale nie wiem jak przekazac wartosci. Wiec Prosze bardzo o pomoc żebyscie podpowiedzieli jak chłopu ze wsi jak to zrobic żeby przypisac do nowej zmiennej ktora bedzie zmienna przechowujaca ONP.

o to kod:

#include <iostream>

using namespace std;

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

    do
    {
        cin >> el;

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

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

    return 0;
}  
0

Zamiast cout<< użyj:

ostringstream sout;

na koniec:

cout<<"wynik: "<<sout.str().c_str()<<endl;
0

wszędzie cout<< zamienic w kazdym z warunków switch'a

0

To był skrót myślowy, ale tobie nie pomoże, zastanów się nad zmianą kierunku kształcenia.

1

Nie musisz od razu naskakiwać. Być może nie każdy jest tak ogarnięty w programowaniu jak Ty. Jeśli prosze na forum z kultura o pomoc to z kultura można odpisać a nie się rzucać. Niestety w przeciwieństwie do Ciebie nie umiem 50tys języków. Dlatego wchodze na forum tutaj z prośba o pomoc w wytłumaczeniu.

0

Nie wchodzisz z prośbą o wytłumaczenie zaś z prośbą o rozwiązanie za ciebie większej części zadania, przy czym nawet to (nie swoje) co podałeś - absolutnie nie rozumiesz.

0

rozumiem bo musze rozumiec bo inaczej mi nie zaliczy i juz doszedlem o co chodzi. Dzięki za pomoc, ale na serio nie jestem mistrzem cpp dlatego zwracam się z tutaj ze wskazówka nie wiedziałem do czego służy ostringstream. Wiem, ze program nie jest mój bo korzystam z edu i tarnow, zresztą możemy z niego korzystac bo korzystamy z podręcznika bazowanego na tym.
Program teraz wyglada tak i robi to co chciałem:

 #include <iostream>
#include <sstream>

using namespace std;

int main()
{
    ostringstream ss;
    char stos[256],el[256];
    int ws = 0;
    string sout;
    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<< " =\n\n";
                          break;
            }

    } while(el[0] != '=');
    cout<<endl;
    cout<<"wynik: "<<ss.str().c_str()<<endl;
    return 0;
}

Dzięki za pomoc jeszcze raz.

//edit

a powie ktos w którym miejscu jest błąd. Zdaje mi się że zapętla sie drugi do..while bo poza granice tablicy chyba i zapętla się.

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