ONP pomoc z błędem

0

Witam, mam do zrobienia projekt z c++ zwiazany z ONP, mam problem z algorytmem zamieniajacym notacje zwykla na onp. Wiem ze bylo juz troche tematow o ONP, jednak chcialbym to zrobic 'po swojemu' nie kopiujac od innych, a analiza ich kodow nie naprowadzila mnie na to, co mam zle. Wklejam kod i bylbym wdzieczny za pomoc, podejrzewam ze chodzi o zachowanie algorytmu w przypadku wystapienia ')' jednak nie wiem jak to poprawic.. Algorym dziala dla prostych wyrazen - z jedna para nawiasow, jednak gdy jest ich wiecej wystepuja bledy. Oto kod:

onp_algorytm::onp_algorytm(void)
{
		stack <char> stos;
		string a='(3*5)-(6+5)-(3+4+5+1)/2'// przykladowe wyrazenie w zwyklej notacji.
		int n = a.length();
		for (int i=0; i<n; i++)
		{
			switch(a[i])
			{
			case '(':
					stos.push(a[i]);
				break;

			case ')':
				while(stos.top()!='(')
				{cout<< stos.top() << " ";
				stos.pop();
				}
				stos.pop();	
				break;

			case '+':
			case '-':
				if(stos.top()!='*'||stos.top()!='/'||stos.top()!='%'||stos.top()!='+'||stos.top()!='-')
					stos.push(a[i]);
				else while(stos.top()!='(' || !stos.empty())
				{
					cout<<stos.top()<<" ";
					stos.pop();
				}
				break;
			case'*':
			case'/':
			case'%':
				while (!stos.empty() && (stos.top()== '*' || stos.top() == '/' || stos.top() == '%'))
				{
					cout << stos.top() << " ";
					stos.pop();
				}
				stos.push(a[i]);
				break;
			default:
				cout<<a[i]<<" ";
				break;
			}
			
		}
		if(stos.top()!=NULL)
		{cout<<stos.top();	
		stos.pop();}
}
1

tylko spojrzałem (nie analizowałem całości). Powiedz mi kiedy ten warunek NIE będzie spełniony:

stos.top()!='*'||stos.top()!='/'||stos.top()!='%'||stos.top()!='+'||stos.top()!='-'

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