Wątek zablokowany 2016-05-04 14:17 przez ŁF.

Wątek przeniesiony 2016-05-04 14:17 z C/C++ przez ŁF.

Konwersja ONP

0

Cześć ! Mam problem z konwersją wyrażeń algebraicznych do ONP. Program działa jeśli w danych wejściowych nie ma nawiasów ( sprawdzony na pliku z milionem danych). Potrafi też obliczyć proste wyrażenia z nawiasami np. x*(y+z). Jednak w momencie gdy nawiasy zaczną się zagnieżdżać, albo jest ich po prostu za wiele otrzymuje komunikat Segmentation fault (core dumped) . Czy mógłby mi ktoś pomóc w znalezieniu błędu ?

#include <iostream>
#include <stack>
using namespace std;
const char znaki[4]{'+','*','-','/'};
int main()
{
string s,wyj;
cout<<"Podaj wyrażenie !"<<endl;
cin>>s;
stack <char> stos;
stack <int> kontr;
for (int i=0;i<s.size();i++)
{
if (s[i]=='x'||s[i]=='y'||s[i]=='z') {wyj+=s[i];}//1
else if (s[i]=='(') stos.push(s[i]);//2
else if (s[i]==')')//3
{
while(stos.top()!='(')
{
wyj+=stos.top();
stos.pop();
}
stos.pop();
}
else//4
{
for(int j=0;j<5;j++)
{
if (s[i]==znaki[j])
{
if (kontr.size()==0 || ( j%2==1 && kontr.top()%2!=1 )   ) {stos.push(znaki[j]); kontr.push(j);}
else
{
while (stos.size()!=0 && kontr.size()!=0)
{
wyj+=stos.top();
stos.pop();
kontr.pop();
}//koniec while
stos.push(znaki[j]);
}//koniec else
}//koniec if
}//koniec for j
}//koniec else
}//koniec for i
while(stos.size()!=0)
{
wyj+=stos.top();
stos.pop();
}
cout<<"Wynik\v"<<wyj<<endl;
return 0;
}
 

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