Last active
August 29, 2015 14:14
-
-
Save erseco/c87b9c73570730185420 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// 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