may 14, 2009

Enviado por 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

    Dejar una respuesta

    Debes ser Alojarse para enviar un comentario.