From bef9c5185a8aa6d175040603e6e7b10d458ff05d Mon Sep 17 00:00:00 2001 From: Maryna Kravtsova Date: Wed, 21 Oct 2020 14:21:10 +0200 Subject: [PATCH] ak2 --- a2/program.c | 75 ++++++++++++++++++++++++++++------------------------ 1 file changed, 40 insertions(+), 35 deletions(-) diff --git a/a2/program.c b/a2/program.c index ba6bcfb..495b26a 100644 --- a/a2/program.c +++ b/a2/program.c @@ -12,34 +12,30 @@ struct stack{ void push(char ch){ if(s.size < 100){ - assert(s.size < 100); s.size++; s.data[s.size] = ch; } - else{ + else exit(0); - - } } -void pop(){ +char pop(){ if(s.size > 0){ - assert(s.size > 0); s.size--; + return (s.data[s.size]); } - else { + else exit(0); - } } bool find_pair(char a, char b){ if(a == '(' && b == ')') return true; - else if(a == '{' && b == '}') + if(a == '{' && b == '}') return true; - else if(a == '<' && b == '>') + if(a == '<' && b == '>') return true; - else if(a == '[' && b == ']') + if(a == '[' && b == ']') return true; return false; @@ -47,18 +43,15 @@ bool find_pair(char a, char b){ } char right_pair(char a){ char b; - if(a == '('){ + if(a == '(') b = ')'; - } - else if(a == '{'){ + if(a == '{') b = '}'; - } - else if(a == '['){ + if(a == '[') b = ']'; - } - else if(a == '<'){ + if(a == '<') b = '>'; - } + return b; } @@ -74,38 +67,50 @@ int main(){ printf("Read: "); char *x = fgets(line, 100, stdin); + printf("%s", line); int l = strlen(line); - int i, j; - + int i, j = 0; + char *a = calloc(l, sizeof(char)); + char *b = calloc(l, sizeof(char)); + for(i = 0; i < l; i++){ - + //a[i] = gettop(); + // b[i] = right_pair(a[i]); + if(line[i] == '{' || line[i] == '(' || line[i] == '[' || line[i] == '<'){ push(line[i]); + a[j] = gettop(); + b[j] = right_pair(a[j]); + j++; + //printf("%c", b[i]); } - else if(line[i] == '}' || line[i] == ')' || line[i] == ']' || line[i] == '>'){ - - char a = gettop(); - if(a != '(' || a != '{' || a != '<' || a != '['){ - printf("Unexpected closing brocket %c in %d\n", line[i], i); + if(line[i] == '}' || line[i] == ')' || line[i] == ']' || line[i] == '>'){ + //a[i] = gettop(); + //b[i] = right_pair(a[i]); + if(s.size == -1){ + printf("Unexpected closing bracket %c in %d\n", line[i], i); return 0; } - else if(s.size == -1 && !find_pair(gettop(), line[i])){ - char b = right_pair(a); + else if(!find_pair(gettop(), line[i])){ printf("Crossed bracket %c in %d, expected %c\n", line[i], i, b); return 0; - } - else{ + } + else{ pop(); - } + } } - } + i = 0; if(s.size == -1){ - printf("All brackest are OK\n"); + printf("All brackets OK\n"); } - + else { + printf("Missing closing brackets: %s \n", b); + } + free(a); + free(b); return 0; }