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();}
}