#include #include #include #include #define MAX_SIZE 100 struct Stack { char data[MAX_SIZE]; int size; } stack; int main() { char code[MAX_SIZE]; stack.size = 0; if (fgets(code, sizeof(code), stdin) == NULL) { printf("Error reading input.\n"); return 1; } if (code[strlen(code) - 1] == '\n') { code[strlen(code) - 1] = '\0'; } printf("Read: %s\n", code); char missing_closing[MAX_SIZE]; int missing_count = 0; if (strlen(code) > MAX_SIZE) { return 1; } for (int i = 0; code[i] != '\0'; i++) { if (code[i] == '(' || code[i] == '[' || code[i] == '{' || code[i] == '<') { if (stack.size < MAX_SIZE) { stack.data[stack.size++] = code[i]; } else { exit(0); } } else if (code[i] == ')' || code[i] == ']' || code[i] == '}' || code[i] == '>') { if (stack.size == 0) { printf("Unexpected closing bracket %c in %d\n", code[i], i); return 0; } char opening = stack.data[stack.size - 1]; stack.size--; if ((code[i] == ')' && opening != '(') || (code[i] == ']' && opening != '[') || (code[i] == '}' && opening != '{') || (code[i] == '>' && opening != '<')) { printf("Crossed bracket %c in %d, expected %c\n", code[i], i, opening); return 0; } } } while (stack.size > 0) { char unclosed = stack.data[--stack.size]; missing_closing[missing_count++] = (unclosed == '(') ? ')' : (unclosed == '[') ? ']' : (unclosed == '{') ? '}' : '>'; if (missing_count >= MAX_SIZE) { exit(0); } } if (missing_count > 0) { printf("Missing closing brackets: %s\n", missing_closing); } else { printf("All brackets OK\n"); } return 0; }