parent.cpp
// $Id$
/*
COMIENZO DE DESCRIPCION
Control de par\'entesis en una expresi\'on algebraica usando
TAD-PILA de caracteres. Por parentizaci\'on en una expresi\'on
algebraica consideramos \'unicamente los simbolos: par\'entisis,
corchetes y llaves.
keywords: pila
FIN DE DESCRIPCION
*/
// -----------------------------------------------------------------
// La cadena leida (caracter a caracter) puede contener otros
// simbolos. Pero, para el control, prestamos atenci\'on s\'olo
// a los caracteres de parentizaci\'on, de los cuales:
//
// a) si el simbolo leido es "abierto", entonces se lo almacena a
// la espera de encontrar un "cerrado";
//
// b) si el simbolo leido es "cerrado", entonces se determina si el
// ULTIMO simbolo "abierto" almacenado es del mismo tipo. Si lo
// son, entonces ambos parentizan correctamente, no hace falta
// considerarlos ulteriormente, y se prosigue evaluando el resto
// de la cadena. Si no lo son, entonces, la cadena estar\'a mal
// parentizada.
//
// En consecuencia, el TAD a usar sera tal que "el \'ultimo en
// entrar, es el primero en salir", o sea, una PILA.
// -----------------------------------------------------------------
#include <stack>
#include <iostream>
using namespace std;
// -----------------------------------------------------------------
int main() {
int nax=100;
char line[nax];
stack <char> p;
int n;
char *t;
// while (true) {
while (!p.empty()) p.pop();
cout << "Ingrese expresion: > ";
cin.getline(line,n);
n=strlen(line);
t=line;
while (*t!='\0') {
if (*t=='(') p.push( ')');
else if (*t=='{') p.push('}');
else if (*t=='[') p.push(']');
else if (*t==']' || *t=='}' || *t==')') {
if (!p.empty() && *t==p.top()) p.pop();
else break;
} // end if
t++;
} // end while
if (p.empty() && *t=='\0')
cout << "Los parentesis matchean bien" << endl;
else
cout << "Los parentesis NO matchean bien" << endl;
//} // end while
cout << endl ;
return 0 ;
} // end main
// -----------------------------------------------------------------
Generated by GNU Enscript 1.6.6.