Teško da će skontati RE.
Bolje mućni svojom glavom!
Stvar možeš riješiti veoma jednostavno, koristeći jednu petlju i pamteći zagrade. I nije mi jasno zašto bi vitičaste zagrade unutar uglastih zagrada bile nepravilne ? Doduše, ono ... Svejedno je opet.
evo onako iz glave
char* funkcija = "{2*[2-x*(1-y)]}";
int L = strlen(funkcija);
char* zagrade;
zagrade = new char[L];
int index=0;
// e sad odavde ide pseudo kod
int S = 3;
ponavljaj:
1. nađi prvu otvorenu zagradu, ako nađeš na zatvorenu zagradu, izađi
2. sačuvaj poziciju zagrade u varijablu int S, a tip zagrade u int T (ako je vitišasta T=2, uglasta T=1, obična T=0), ako S nije manje od prethodno S, izađi jer raspored zagrada nije uredu
3. nađi zadnju zagradu,ako ne odgovara zagradi tipa zatvorena T na mjestu S onda izađi jer funkcija ne valja
4. ponavljaj postupak dok prilikom pretraživanja ne naiđeš na zagradu
Eto to bi bilo nerekurzivno riješenje, ako koristiš lokalnu varijablu T i S i while petlju, a može biti i rekurzivno ako koristiš pozivanje funkcije umjesto while petlje (loše).
Nadam se da više od ovoga nije potrebno, svjedno ako baš ne znaš, pomoćićemo ti, ionako nemamo pametnija posla sad u zimu