#include #include #include "pila_delim.hpp" using namespace std; /* Devuelve el carácter delimitador de cierre de c */ char cierre(char c) { if (c == '(') { return ')'; } else if (c == '[') { return ']'; } else if (c == '{') { return '}'; } else{ cerr << "Carácter " << c << " inesperado!"; return -1; } } /* Comprueba si la cadena s está balanceada usando PilaDelim * Ojo: la cadena vacía se asume que es una expresión balanceada */ bool balanceada(string s) { PilaDelim p; bool error = false, estaBalanceada = true; unsigned len = s.length(); inicializar(p); for (unsigned i = 0; i < len && !error && estaBalanceada; i++){ char c = s[i], c2; if (c == '(' || c == '[' || c == '{') { apilar(p, c, error); } else if (c == ')' || c == ']' || c == '}') { desapilar(p, c2, error); estaBalanceada = (cierre(c2) == c); } } return estaBalanceada && estaVacia(p); } /* * Programa principal que solicita una expresión al usuario y comprueba * si la expresión dada está correctamente balanceada o no, usando una * pila de caracteres delimitadores de apertura */ int main() { string expresion; cout << "Introduce una expresión: "; cin >> expresion; cout << "La expresión: " << expresion << endl; if (!balanceada(expresion)){ cout << "NO "; } cout << "ESTÁ balanceada." << endl; return 0; }