Voici donc mon problème :
Je suis censé écrire un programme c++ qui vérifie qu'une chaîne de caractères est équilibrée. Jusqu'à présent, j'ai réussi à faire fonctionner le code pour m'assurer qu'elle a le même nombre de ('s et de ) (de même que de ['s et de {'s). Le problème est que cela fonctionne pour presque tout, mais pas pour les chaînes de caractères où les {, les ( et les [ sont tous mélangés.
Par exemple : "{ { [ ( ) ] } ( ) }" revient équilibré (vrai) comme il se doit. Cependant, "{ ( [ ] } } )" revient vrai, mais il ne devrait pas.
Quelles sont les idées dans la logique et/ou le code qui permettraient de vérifier s'ils sont hors d'usage ?
Merci pour toute aide !
Au cas où cela vous aiderait, voici mon code :
bool ExpressionManager::isBalanced(string expression)
{
//remove whitespace
string edited;
for(int i = 0; i < expression.length(); i++)
{
if(expression[i] == ' ')
{
continue;
}
else
{
edited += expression[i];
}
}
expression = edited;
//set up brckets
string brackets;
for(int i = 0; i < expression.length(); i++)
{
if (expression.at(i)=='(')
{
brackets += expression.at(i);
}
if (expression.at(i)=='[')
{
brackets += expression.at(i);
}
if (expression.at(i)=='{')
{
brackets += expression.at(i);
}
if (expression.at(i)=='}')
{
brackets += expression.at(i);
}
if (expression.at(i)==']')
{
brackets += expression.at(i);
}
if (expression.at(i)==')')
{
brackets += expression.at(i);
}
}
int parenbal = 0;
int brackbal = 0;
int mustachebal = 0;
for (int i = 0; i<(brackets.size());i++)
{
if(brackets[i]=='(')
parenbal++;
if(brackets[i]=='[')
brackbal++;
if(brackets[i]=='{')
mustachebal++;
if(brackets[i]==')')
parenbal--;
if(brackets[i]==']')
brackbal--;
if(brackets[i]=='}')
mustachebal--;
}
bool isbalanced = false;
if ((mustachebal==0)&&(brackbal==0)&&(parenbal==0))
{
isbalanced = true;
}
//check for brackets mixed up with other stuff.
return isbalanced;
}