Advertisement
DimasDark

Parenthesys Problem

May 29th, 2013
293
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.76 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <string.h>
  3.  
  4. //IN TRUTH IT'S IN C WITH JUST A FEW COMMANDS IN C++ ;P ~BY DIMASDARK 'N' BELLY~ HUEHUEHUE BR
  5.  
  6. typedef struct pilha
  7. {
  8.  
  9.     char c;
  10.     struct pilha *proximo;
  11.  
  12. } Pilha;
  13.  
  14. Pilha *novaPilha()
  15. {
  16.     return NULL;
  17. }
  18.  
  19. int pilhaVazia(Pilha *p)
  20. {
  21.     if (p == NULL)
  22.         return -1;
  23.     else
  24.         return 0;
  25. }
  26.  
  27.  
  28. Pilha *topo(Pilha *p)
  29. {
  30.  
  31.     return p;
  32. }
  33.  
  34. Pilha *desempilhar(Pilha *p)
  35. {
  36.     Pilha *aux = p -> proximo;
  37.     delete(p);
  38.     p = aux;
  39.     return p;
  40. }
  41.  
  42. Pilha *empilhar(Pilha *p, char c)
  43. {
  44.     Pilha *novo = new Pilha();
  45.     novo -> c = c;
  46.     novo -> proximo = p;
  47.     p = novo;
  48.  
  49.     return p;
  50. }
  51.  
  52. int main()
  53. {
  54.     int contador;
  55.     int teste;
  56.     int tamanho;
  57.  
  58.  
  59.  
  60.     scanf("%d", &contador);
  61.     getchar();
  62.  
  63.     while (contador > 0)
  64.     {
  65.         int contador_recipiente = 0;
  66.         char entrada[128];
  67.         gets(entrada);
  68.         tamanho = strlen(entrada);
  69.         Pilha *p;
  70.         p = novaPilha();
  71.  
  72.  
  73.  
  74.         if (entrada[0] == '\0')
  75.             teste = 0;
  76.         else
  77.         {
  78.             for (int i = 0; i < tamanho; i++)
  79.             {
  80.                 if (entrada[i] == '(' || entrada[i] == '[')
  81.                 {
  82.                     p = empilhar(p, entrada[i]);
  83.  
  84.                     contador_recipiente++;
  85.                 }
  86.                 else
  87.                 {
  88.                     teste = pilhaVazia(p);
  89.                     if (teste != -1) //Não é vazia
  90.                     {
  91.                         if(entrada[i] == ')' && p->c == '(')
  92.                         {
  93.  
  94.                             p = desempilhar(p);
  95.                             contador_recipiente--;
  96.                         }
  97.                         else if (entrada[i] == ']' && p->c == '[')
  98.                         {
  99.  
  100.                             p = desempilhar(p);
  101.                             contador_recipiente--;
  102.                         }
  103.                     }
  104.                     else
  105.                     {
  106.                         contador_recipiente--;
  107.                         break;
  108.                     }
  109.                 }
  110.             }
  111.  
  112.  
  113.         }
  114.  
  115.         teste = pilhaVazia(p);
  116.         if (entrada[0] == ')' || entrada[0] == ']')
  117.             teste = 0;
  118.         if ( (teste == -1 && entrada[0] != ')') || (teste == -1 && entrada[0] != ']'))
  119.         {
  120.             if (contador_recipiente == 0)
  121.             {
  122.                 printf("Yes\n");
  123.                 strcpy(entrada, "");
  124.             }
  125.             else
  126.             {
  127.                 printf("No\n");
  128.                 strcpy(entrada, "");
  129.             }
  130.         }
  131.         else
  132.         {
  133.             printf("No\n");
  134.             strcpy(entrada, "");
  135.         }
  136.         contador--;
  137.  
  138.     }
  139.  
  140.  
  141.  
  142.     return 0;
  143.  
  144. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement