Code:
string _formula = "~~~~~~~~~~~~~~~~~~"; //tvoj string
string _newFormula = ""; //pomocna promenljiva
while (_formula.IndexOf("{") >= 0)
{
//Odredjujemo najdublje zagrade u stringu
int levelOfBracket = 0;
int indexOfOpenBracket = -1;
int indexOfClosedBracket = -1;
int currLevel = 0;
int currLevelOfOpenBracket = -1;
for (int i = 0; i < strlen(_formula); i++)
{
if (_formula[i] == "{")
{
currLevel++;
currLevelOfOpenBracket = i;
}
if (_formula[i]== "}")
{
if (currLevel > levelOfBracket)
{
levelOfBracket = currLevel;
indexOfClosedBracket = i;
indexOfOpenBracket = currLevelOfOpenBracket;
}
currLevel--;
}
}
// secemo sve od pocetka do najdublje zagrade, obradjujemo podatke koji su u najdubljim zagradama, i lepimo ostatak...
// i tako sve dok ima zagrada...
_newFormula = substr(_formula, 0, indexOfOpenBracket);
_newFormula += UradiNestoSaNajdubljimZagradama(substr(_formula, indexOfOpenBracket + 1, indexOfClosedBracket - indexOfOpenBracket - 1)));
_newFormula += substr(_formula, indexOfClosedBracket + 1);
_formula = _newFormula;
}
ideja je da se nadju najdublje zagrade prvo, isece sve izmedju njih, i odradi neka custom funkcija, i vrati rezultat umesto tog dela (ili se jednostavno odstrani taj deo posle custom funkcije). Ponovo se odradjuje isto, sve dok se ne dodje do kraja...
Nisam probao za tvoj konkretan primer, ali probaj, poenta je u ideji, sad koliko je dobra, necu da sudim, ali meni je odradila posao :)))