usaa25/a1/program.c
2025-10-21 23:58:45 +02:00

93 lines
2.2 KiB
C

#include <stdio.h>
#include <string.h>
#define MAX_SIZE 110
int proverka(char otv, char zatv) {
if (otv == '(' && zatv == ')') {
return 1;
}
else if (otv == '{' && zatv == '}') {
return 1;
}
else if (otv == '[' && zatv == ']') {
return 1;
}
else if (otv == '<' && zatv == '>') {
return 1;
}
else {
return 0;
}
}
int main() {
char riadok[MAX_SIZE];
char zasobnik[MAX_SIZE];
int vrch = -1;
int chyba = 0;
char znak;
if (fgets(riadok, MAX_SIZE, stdin) == NULL) {
printf("Input Error!\n");
return 1;
}
riadok[strcspn(riadok, "\n")] = '\0';
printf("Read: %s\n", riadok);
int dlzka = strlen(riadok);
for (int i = 0; i < dlzka; i++) {
znak = riadok[i];
if (znak == '(' || znak == '[' || znak == '{' || znak == '<') {
zasobnik[++vrch] = znak;
}
else if (znak == ')' || znak == ']' || znak == '}' || znak == '>') {
if (vrch < 0) {
printf("Unexpected closing bracket %c in %d\n", znak, i + 1);
chyba = 1;
break;
}
if (!proverka(zasobnik[vrch], znak)) {
char ocakavany;
switch (zasobnik[vrch]) {
case '(':
ocakavany = ')';
break;
case '[':
ocakavany = ']';
break;
case '{':
ocakavany = '}';
break;
case '<':
ocakavany = '>';
break;
default:
ocakavany = '?';
break;
}
printf("Crossed bracket %c in %d, expected %c\n", znak, i + 1, ocakavany);
chyba = 1;
break;
}
vrch--;
}
}
if (!chyba && vrch >= 0) {
printf("Unclosed bracket %c at the end\n", zasobnik[vrch]);
chyba = 1;
}
if (!chyba) {
printf("All brackets OK\n");
}
return 0;
}