karlangadas

Parentheses Balance

Oct 23rd, 2016
95
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.04 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include "pila.h"
  4. int HallartipoCar(char car,char arraycar[4]);
  5. int ParenthesesBalance(TPila *S);
  6. int main(){
  7.     TPila S;
  8.     char car;
  9.     Stack_Create(&S);
  10.    
  11.     if(ParenthesesBalance(&S))
  12.         printf(" --> ES CORRECTA\n");
  13.     else
  14.         printf(" --> NO ES CORRECTA\n");
  15.    
  16.    
  17.     return 0;
  18. }
  19.  
  20. int ParenthesesBalance(TPila *S){
  21.     char arraycar[4]={'(','[',')',']'};
  22.     int numcar[4]={0,0,0,0};
  23.     char car;
  24.     int tipoCar;
  25.  
  26.     scanf("%c",&car);
  27.    
  28.     while ((car=='(') ||  (car==')') ||  (car=='[') ||  (car==']')){
  29.         printf("%c",car);
  30.         //nos dará el número que le corresponde a nuestro caracter
  31.         tipoCar=HallartipoCar(car,arraycar);
  32.         //si los caracteres son abiertos
  33.         if (car=='(' || car=='['){
  34.             //Los apilamos
  35.             Stack_Push(S,car);
  36.             //y aumentamos el el número de caracteres correcpondiente
  37.             numcar[tipoCar]++;
  38.         }
  39.         //Si los caracteres son cerrados
  40.         else{
  41.             //Si la pila está vacía, será incorrecto
  42.             if (Stack_IsEmpty(*S)){
  43.                 //aumentamos el número de caracteres para que detecte el error
  44.                 numcar[tipoCar]++;
  45.                 //y salimos
  46.                 scanf("%c",&car);
  47.                 break;
  48.             }
  49.             //si la pila no está vacía, por el momento vamos bien
  50.             else{
  51.                 //Verificamos que el peek sea su caracter correspondiente en abierto
  52.                 if(HallartipoCar((S->top->elem),arraycar)+2==tipoCar){
  53.                     //Si es así, desempilamos
  54.                     Stack_Pop(S);
  55.                     //y actualizamos los valores de numcar
  56.                     numcar[tipoCar-2]--;
  57.                 }
  58.                 else{
  59.                     scanf("%c",&car);
  60.                     break;
  61.                 }
  62.             }  
  63.         }
  64.         scanf("%c",&car);  
  65.     }
  66.     //Imprimimos los caracteres que faltan
  67.     while ((car=='(') ||  (car==')') ||  (car=='[') ||  (car==']')){
  68.         printf("%c",car);
  69.         scanf("%c",&car);
  70.     }
  71.     //Al salir, verificamos que la pila esté vacía
  72.     if (Stack_IsEmpty(*S)){
  73.         //y si los valores de numcar son 0
  74.         if (numcar[0]==0 && numcar[1]==0 && numcar[2]==0 && numcar[3]==0)
  75.             return 1;
  76.         return 0;
  77.     }
  78.     return 0;
  79. }
  80. int HallartipoCar(char car,char arraycar[4]){
  81.     for (int i=0;i<4;i++){
  82.         if (arraycar[i]==car)
  83.             return i;
  84.     }
  85.     return 0;
  86. }
Advertisement
Add Comment
Please, Sign In to add comment