115 lines
2.8 KiB
C
115 lines
2.8 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);
|
|
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, ocakavany);
|
|
chyba = 1;
|
|
break;
|
|
}
|
|
|
|
vrch--;
|
|
}
|
|
}
|
|
|
|
if (!chyba && vrch >= 0) {
|
|
printf("Missing closing brackets: ");
|
|
for (int j = vrch; j >= 0; j--) {
|
|
char expected;
|
|
switch (zasobnik[j]) {
|
|
case '(':
|
|
expected = ')';
|
|
break;
|
|
case '[':
|
|
expected = ']';
|
|
break;
|
|
case '{':
|
|
expected = '}';
|
|
break;
|
|
case '<':
|
|
expected = '>';
|
|
break;
|
|
default:
|
|
expected = '?';
|
|
break;
|
|
}
|
|
printf("%c", expected);
|
|
}
|
|
printf("\n");
|
|
chyba = 1;
|
|
}
|
|
|
|
if (!chyba) {
|
|
printf("All brackets OK\n");
|
|
}
|
|
|
|
return 0;
|
|
}
|