#include #include #define MAX_LEN 100 // Стек для хранения открывающих скобок char stack[MAX_LEN]; int top = -1; // Функция для добавления элемента в стек void push(char c) { if (top < MAX_LEN - 1) { stack[++top] = c; } } // Функция для извлечения элемента из стека char pop() { if (top >= 0) { return stack[top--]; } return '\0'; // Если стек пустой } // Функция для проверки соответствия скобок int isMatchingPair(char open, char close) { return (open == '(' && close == ')') || (open == '{' && close == '}') || (open == '[' && close == ']') || (open == '<' && close == '>'); } int main() { char code[MAX_LEN]; fgets(code, MAX_LEN, stdin); // Убираем лишний символ новой строки, если он есть code[strcspn(code, "\n")] = 0; printf("Read: %s\n", code); for (int i = 0; i < strlen(code); i++) { char c = code[i]; if (c == '(' || c == '{' || c == '[' || c == '<') { push(c); } else if (c == ')' || c == '}' || c == ']' || c == '>') { // Проверка на неожиданную закрывающую скобку без пары if (top == -1) { printf("Unexpected closing bracket %c in %d\n", c, i); return 0; // Ожидается код завершения 0 } char lastOpen = pop(); if (!isMatchingPair(lastOpen, c)) { printf("Crossed bracket %c in %d, expected %c\n", c, i + 1, lastOpen); return 0; // Ожидается код завершения 0 } } } // Проверка на незакрытые скобки if (top != -1) { printf("Unclosed bracket %c\n", stack[top]); return 0; // Ожидается код завершения 0 } printf("All brackets OK\n"); return 0; }