ONP dla dowolnych liczb

0

Cześć wszystkim! Napisałem program na ONP, jednak działa on tylko na cyfach 0-9, nie mam pojęcia jak się zabrać za to, aby działały wszystkie liczby naturalne oraz abym mógł oddzielać każdy znak i liczbę spacją, a program się nie wysypywał. Poniżej kod:

 #include <iostream>
using namespace std;

struct element
{
 int wartosc;
 element *poprzedni;
};

element *dodaj (int liczba, element *wierzcholek)
{
	element *wsk;
	wsk = new element;
	if (!wsk) 
		return 0;
	wsk->wartosc=liczba;
	wsk->poprzedni=wierzcholek;
	return wsk;
}

element *usun (int *liczba, element *wierzcholek)
{
	if (!wierzcholek) 
		return 0;
	element *wsk;
	*liczba=wierzcholek->wartosc;
	wsk=wierzcholek->poprzedni;
	delete wierzcholek;
	return wsk;
}

void wypisz (element *wsk)
{
	cout<<"aktualny stos: ";
		while (wsk!=NULL)
			{
				cout<<wsk->wartosc<<"\t";
				wsk=wsk->poprzedni;
			}
	cout<<endl;
}

main()
{
	element *wierzcholek;
	string s;
	int x,y,k,w;
	cout<<"Podaj wyrazenie ONP";
	wierzcholek=NULL;
	getline(cin,s);
	int n=s.size();
	wypisz(wierzcholek);
	for (int i=0;i<n;i++)
		{
			if(isdigit(s[i])) 
				{
				wierzcholek=dodaj(s[i]-48,wierzcholek);
				wypisz(wierzcholek);
				}
			else
				{
					wierzcholek=usun(&k,wierzcholek);
					x=k;
					wierzcholek=usun(&k,wierzcholek);
					y=k;
					wypisz (wierzcholek);
					switch (s[i])
						{
							case '+':w=y+x; break;
							case '-':w=y-x; break;
							case '*':w=y*x; break;
							case '/':w=y/x; break;
						}
				wierzcholek=dodaj(w,wierzcholek);
				wypisz(wierzcholek);
				}
		}	
	return 0;
}
0

Musisz zmienić ten fragment:

            if(isdigit(s[i])) 
                {
                wierzcholek=dodaj(s[i]-48,wierzcholek);
                wypisz(wierzcholek);
                }
0

Nie za bardzo wiem jak, mógłbyś dać mi jeszcze jakieś wskazówki?

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