Aktualizovat a1/program.c
This commit is contained in:
parent
a1779530b2
commit
b800283ce0
64
a1/program.c
64
a1/program.c
@ -0,0 +1,64 @@
|
|||||||
|
#include <stdio.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
#define MAX_LEN 101
|
||||||
|
|
||||||
|
int open(char a) {
|
||||||
|
return (a=='('|| a=='[' || a=='{' || a=='<');
|
||||||
|
}
|
||||||
|
int close(char a) {
|
||||||
|
return (a==')'|| a==']' || a=='}' || a=='>');
|
||||||
|
}
|
||||||
|
|
||||||
|
char matching(char a) {
|
||||||
|
switch (a) {
|
||||||
|
case ')': return '(';
|
||||||
|
case ']': return '[';
|
||||||
|
case '}': return '{';
|
||||||
|
case '>': return '<';
|
||||||
|
case '(': return ')';
|
||||||
|
case '[': return ']';
|
||||||
|
case '{': return '}';
|
||||||
|
case '<': return '>';
|
||||||
|
default: return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int main() {
|
||||||
|
char line[MAX_LEN];
|
||||||
|
if (!fgets(line, sizeof(line), stdin))
|
||||||
|
return 0;
|
||||||
|
line[strcspn(line, "\n")] = 0;
|
||||||
|
printf("Read: %s\n", line);
|
||||||
|
|
||||||
|
char stack[MAX_LEN-1];
|
||||||
|
int verh =-1;
|
||||||
|
|
||||||
|
for (int i=0; line[i]; i++) {
|
||||||
|
char a=line[i];
|
||||||
|
|
||||||
|
if (open(a)) {
|
||||||
|
if (verh < MAX_LEN-2){
|
||||||
|
stack[++verh] =a;}
|
||||||
|
} else if (close(a)) {
|
||||||
|
if (verh == -1) {
|
||||||
|
printf("Unexpected closing bracket %c in %d\n", a, i);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
if (stack[verh] != matching(a)) {
|
||||||
|
printf("Crossed bracket %c in %d, expected %c\n", a, i, matching(stack[verh]));
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
verh--;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (verh !=-1) {
|
||||||
|
printf("Unclosed bracket %c at end, expected %c\n",
|
||||||
|
stack[verh], matching(stack[verh]));
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
printf("All brackets OK\n");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
Loading…
Reference in New Issue
Block a user