#include "stdio.h" #include "string.h" struct Stack { char symbol[100]; int size; }; void pushStack(struct Stack* stack, char symbol){ stack->symbol[stack->size] = symbol; stack->size++; } float popStack(struct Stack* stack){ char c = stack->symbol[stack->size -1]; stack->size -= 1; return c; } int main(){ char string[50]; //0 - 49 char BB[50]; //0 - 49 struct Stack stack; memset(&stack, 0, sizeof(struct Stack)); int x = 0; scanf("%[^\n]", string); strcpy(BB, string); int i = 0; while (1){ if( BB[i] == '[' || BB[i] == '(' || BB[i] == '{' || BB[i] == '<'){ pushStack(&stack, BB[i]); BB[i] = ' '; x++; } if( BB[i] == ']' || BB[i] == ')' || BB[i] == '}' || BB[i] == '>'){ if (x == 0){ printf ("Read: %s\nUnexpected closing bracket %c in %d\n",string, BB[i], i); return 0; } char c = popStack(&stack); if (c =='('){ c--; } if (c+2 != BB[i]){ printf("Read: %s\nCrossed bracket %c in %d, expected %c \n", string, BB[i], i, c+2); return 0; } } i++; if (i == strlen(string)) break; } if (stack.size > 0){ printf("Read: %s\nMissing closing brackets: ", string); while (stack.size > 0){ char c = popStack(&stack); if (c =='('){ c--; } printf("%c", c+2); } printf("\n"); return 0; } printf("Read: %s\nAll brackets OK\n", string); return 0; }