58 lines
1.8 KiB
C
58 lines
1.8 KiB
C
#include <stdio.h>
|
|
#include <string.h>
|
|
|
|
#define LINESIZE 100
|
|
|
|
int main() {
|
|
char vstup[LINESIZE];
|
|
char *brackets = "{[(<";
|
|
char *brackets1 = "}])>";
|
|
char stack[LINESIZE];
|
|
int position[LINESIZE];
|
|
int x = 0;
|
|
char expected = '\0';
|
|
fgets(vstup, LINESIZE, stdin);
|
|
printf("Read: %s", vstup);
|
|
for (int j = 0; j < strlen(vstup); j++) {
|
|
for (int i = 0; i < 4; i++) {
|
|
if (vstup[j] == brackets[i]) {
|
|
stack[x] = brackets[i];
|
|
position[x] = j;
|
|
x++;
|
|
break;
|
|
} else if (vstup[j] == brackets1[i]) {
|
|
if (stack[x-1] == '{') expected = '}';
|
|
else if (stack[x-1] == '[') expected = ']';
|
|
else if (stack[x-1] == '(') expected = ')';
|
|
else if (stack[x-1] == '<') expected = '>';
|
|
|
|
if (vstup[j] != expected) {
|
|
if(expected != '\0'){
|
|
printf("Crossed bracket %c in %d, expected %c \n", vstup[j], j, expected);
|
|
return 0;
|
|
}
|
|
else{
|
|
printf("Unexpected closing bracket %c in %d\n", vstup[j], j);
|
|
return 0;
|
|
}
|
|
}
|
|
x--;
|
|
expected = '\0';
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
if (x > 0) {
|
|
printf("Missing closing brackets: ");
|
|
for (int i = x-1; i >= 0; i--) {
|
|
if (stack[i] == '{') printf("}");
|
|
else if (stack[i] == '[') printf("]");
|
|
else if (stack[i] == '(') printf(")");
|
|
else if (stack[i] == '<') printf(">");
|
|
}
|
|
printf("\n");
|
|
} else {
|
|
printf("All brackets OK\n");
|
|
}
|
|
return 0;
|
|
} |