#include #include #define MAX_LEN 100 // Функция для проверки пары скобок int is_matching_pair(char open, char close) { return (open == '(' && close == ')') || (open == '{' && close == '}') || (open == '[' && close == ']') || (open == '<' && close == '>'); } // Основная функция для проверки строки со скобками void check_brackets(const char *code) { char stack[MAX_LEN]; int positions[MAX_LEN]; int top = -1; // Инициализация стека как пустого printf("Read: %s\n", code); for (int i = 0; i < strlen(code); i++) { char ch = code[i]; // Если символ — открывающая скобка, добавляем в стек if (ch == '(' || ch == '{' || ch == '[' || ch == '<') { if (top < MAX_LEN - 1) { stack[++top] = ch; positions[top] = i; } else { printf("Stack overflow at position %d\n", i); return; } } // Если символ — закрывающая скобка else if (ch == ')' || ch == '}' || ch == ']' || ch == '>') { if (top == -1) { printf("Unmatched closing bracket %c at position %d\n", ch, i); return; } if (!is_matching_pair(stack[top], ch)) { printf("Crossed bracket %c in %d, expected %c\n", ch, i, stack[top] == '(' ? ')' : stack[top] == '{' ? '}' : stack[top] == '[' ? ']' : '>'); return; } top--; // Убираем из стека совпавшую пару } } // Проверяем оставшиеся незакрытые скобки if (top != -1) { printf("Unmatched opening bracket %c at position %d, expected %c\n", stack[top], positions[top], stack[top] == '(' ? ')' : stack[top] == '{' ? '}' : stack[top] == '[' ? ']' : '>'); } else { printf("All brackets OK\n"); } } int main() { // Примеры для проверки check_brackets("{[<(asdf)>]}"); check_brackets(")"); return 0; }