Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include "pila.h"
- int HallartipoCar(char car,char arraycar[4]);
- int ParenthesesBalance(TPila *S);
- int main(){
- TPila S;
- char car;
- Stack_Create(&S);
- if(ParenthesesBalance(&S))
- printf(" --> ES CORRECTA\n");
- else
- printf(" --> NO ES CORRECTA\n");
- return 0;
- }
- int ParenthesesBalance(TPila *S){
- char arraycar[4]={'(','[',')',']'};
- int numcar[4]={0,0,0,0};
- char car;
- int tipoCar;
- scanf("%c",&car);
- while ((car=='(') || (car==')') || (car=='[') || (car==']')){
- printf("%c",car);
- //nos dará el número que le corresponde a nuestro caracter
- tipoCar=HallartipoCar(car,arraycar);
- //si los caracteres son abiertos
- if (car=='(' || car=='['){
- //Los apilamos
- Stack_Push(S,car);
- //y aumentamos el el número de caracteres correcpondiente
- numcar[tipoCar]++;
- }
- //Si los caracteres son cerrados
- else{
- //Si la pila está vacía, será incorrecto
- if (Stack_IsEmpty(*S)){
- //aumentamos el número de caracteres para que detecte el error
- numcar[tipoCar]++;
- //y salimos
- scanf("%c",&car);
- break;
- }
- //si la pila no está vacía, por el momento vamos bien
- else{
- //Verificamos que el peek sea su caracter correspondiente en abierto
- if(HallartipoCar((S->top->elem),arraycar)+2==tipoCar){
- //Si es así, desempilamos
- Stack_Pop(S);
- //y actualizamos los valores de numcar
- numcar[tipoCar-2]--;
- }
- else{
- scanf("%c",&car);
- break;
- }
- }
- }
- scanf("%c",&car);
- }
- //Imprimimos los caracteres que faltan
- while ((car=='(') || (car==')') || (car=='[') || (car==']')){
- printf("%c",car);
- scanf("%c",&car);
- }
- //Al salir, verificamos que la pila esté vacía
- if (Stack_IsEmpty(*S)){
- //y si los valores de numcar son 0
- if (numcar[0]==0 && numcar[1]==0 && numcar[2]==0 && numcar[3]==0)
- return 1;
- return 0;
- }
- return 0;
- }
- int HallartipoCar(char car,char arraycar[4]){
- for (int i=0;i<4;i++){
- if (arraycar[i]==car)
- return i;
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment