usaa25/a1/program.c
2025-10-20 21:10:11 +02:00

69 lines
1.4 KiB
C

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAX_LEN 100
char pairs[][2] = {
{'(', ')'},
{'[', ']'},
{'{', '}'},
{'<', '>'}
};
int is_open(char c) {
for (int i = 0; i < 4; i++)
if (pairs[i][0] == c) return 1;
return 0;
}
int is_close(char c) {
for (int i = 0; i < 4; i++)
if (pairs[i][1] == c) return 1;
return 0;
}
char match(char c) {
for (int i = 0; i < 4; i++)
if (pairs[i][0] == c) return pairs[i][1];
return '?';
}
int main(void) {
char code[MAX_LEN + 2];
char stack[MAX_LEN];
int top = -1;
if (fgets(code, sizeof(code), stdin) == NULL)
return 0;
code[strcspn(code, "\n")] = '\0';
printf("Read: %s\n", code);
for (int i = 0; code[i] != '\0'; i++) {
char c = code[i];
if (is_open(c)) {
if (top < MAX_LEN - 1)
stack[++top] = c;
} else if (is_close(c)) {
if (top < 0) {
printf("Unexpected closing bracket %c in %d\n", c, i);
return 0;
}
char last = stack[top--];
if (match(last) != c)
(void)(printf("Crossed bracket %c in %d, expected %c\n", c, i , match(last)), exit(0));
}
}
(top >= 0)
? printf("Missing closing brackets: ", stack[top], (int)strlen(code))
: printf("All brackets OK\n");
return 0;
}