#include #include #define MAX 100 // Функція для визначення очікуваної закриваючої дужки char expected_close(char open) { switch(open) { case '(': return ')'; case '{': return '}'; case '[': return ']'; case '<': return '>'; default: return '\0'; } } // Функція для перевірки коректності дужок void check_brackets(const char *code) { char stack[MAX]; int stack_top = -1; // Вершина стеку printf("Read: %s\n", code); for (int i = 0; code[i] != '\0'; i++) { char c = code[i]; // Якщо відкрита дужка, додаємо її до стеку if (c == '(' || c == '{' || c == '[' || c == '<') { if (stack_top >= MAX - 1) { printf("Stack overflow at position %d\n", i); return; } stack[++stack_top] = c; } // Якщо закрита дужка else if (c == ')' || c == '}' || c == ']' || c == '>') { if (stack_top < 0) { printf("Unexpected closing bracket %c at position %d\n", c, i); return; } char top = stack[stack_top--]; char expected = expected_close(top); if (expected != c) { printf("Crossed bracket %c at position %d, expected %c\n", c, i, expected); return; } } } // Перевірка, чи всі дужки закриті if (stack_top >= 0) { printf("Missing closing brackets: "); while (stack_top >= 0) { printf("%c", expected_close(stack[stack_top--])); } printf("\n"); } else { printf("All brackets OK\n"); } } int main() { char code[MAX]; fgets(code, MAX, stdin); // Видаляємо символ нової строки в кінці code[strcspn(code, "\n")] = '\0'; // Перевірка дужок check_brackets(code); return 0; }