Skip to content

Instantly share code, notes, and snippets.

@erseco
Last active August 29, 2015 14:14
Show Gist options
  • Save erseco/c87b9c73570730185420 to your computer and use it in GitHub Desktop.
Save erseco/c87b9c73570730185420 to your computer and use it in GitHub Desktop.
// Diseñar una función booleana que devuelva true si en una expresión matemática los paréntesis, corchetes y llaves están colocados de forma correcta (a cada símbolo abierto le corresponde uno cerrado del mismo tipo)
// Codigo basado en una solución parecida encontrada en stackoverflow
bool pareados(char abre,char cierra)
{
bool pareado = false;
if(abre == '(' && cierra == ')')
pareado = true;
else if(abre == '{' && cierra == '}')
pareado = true;
else if(abre == '[' && cierra == ']')
pareado = true;
return pareado;
}
bool parentizado(string sentencia)
{
stack<char> buffer;
for(string::iterator it = sentencia.begin() ;it!=sentencia.end(); ++it)
{
// cada vez que encontramos un parentesis de apertura...
if(*it == '(' || *it == '{' || *it== '[')
{
// ...lo echamos al buffer
buffer.push(*it);
}
// cada vez que encontramos un parentesis de cierre...
else if(*it == ')' || *it == '}' || *it == ']')
{
// ...si el buffer contiene algo y el ultimo abierto es del mismo tipo...
if (!buffer.empty() && pareados(buffer.top(),*it))
buffer.pop(); // ...lo sacamos del buffer
else
return false; // ...no está correctamente parentizada
}
}
return buffer.empty() ? true : false;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment