Enviado por Kalith en Algoritmos, C/C++
Balanceo de expresiones II
Buenas.
Ayer en este post hablabamos de balanceo de expresiones de una forma mas sencilla, hoy vamos a ver algo igual sencillo, pero con un poco mas de trabajo, y son las expresiones de multiples simbolos, por ejemplo que llevan corchetes, parentesis, llaves etc.
La teoría es la misma vamos a buscar en el tope de la pila y si el elemento coincide con su contraparte se retira de la pila
Para que se vea de una manera mas clara teniendo la expresion ” [()] ” va ingresando los simbolos de apertura se encuentra el primer simbolo de cierre es decir ” ) ” si sun contraparte, osea ” ( ” es el elemto del tope simplemente se retira.
Asi se puede hacer con infinitos simbolos siempre teniendo en cuenta que el elemento que mas dentro está, es el que debe cerrar primero y el primero es el que debe cerrar de ultimo.
Bueno aca el código, esta lleno de bugs, el que se anime a corregirlos esta en la libertad de hacerlo
#include <iostream>
#include <stack>
#include <string>
using namespace std;
int main(void)
{
string word;
stack <char> simb;
cout << "Ingrese una expresion: ";
getline(cin, word);
for(int i = 0; word[i] != '\0'; ++i)
{
if(word[i] == '(' || word[i] == '[' || word[i] == '{')
simb.push(word[i]);
if(word[i] == ')' && simb.top() == '(')
simb.pop();
else
if(word[i] == ']' && simb.top() == '[')
simb.pop();
else
if(word[i] == '}' && simb.top() == '{')
simb.pop();
}
if((int) simb.size() == 0)
cout << "Esta balanceada." << endl;
else
cout << "No esta balanceada." << endl;
}
Basicamente eso es todo, este tema tiene mucha tela que cortar pero por esta vez dejemoslo asi
saludos
Posts Relacionados
- Balanceo de expresiones usando pilas en c++ Buenas El balanceo de expresiones (no se con que otro...
- Intento de grep en c++ Buenas. Necesitaba este pequeño programita para algo que estoy haciendo,...
- ¿Cómo iterar en sentido contrario? Respuesta: reverse_iterator Lo puedes conseguir en la librería STL, bajo...
- 500! Buenas. Hace unos días en un post sobre permutaciones dabamos...


