92 lines
1.8 KiB
C
92 lines
1.8 KiB
C
#include "stdio.h"
|
|
#include "string.h"
|
|
|
|
struct Stack {
|
|
char symbol[100];
|
|
int size;
|
|
};
|
|
|
|
void pushStack(struct Stack* stack, char symbol){
|
|
stack->symbol[stack->size] = symbol;
|
|
stack->size++;
|
|
}
|
|
|
|
float popStack(struct Stack* stack){
|
|
char c = stack->symbol[stack->size -1];
|
|
stack->size -= 1;
|
|
return c;
|
|
}
|
|
|
|
int main(){
|
|
|
|
char string[50]; //0 - 49
|
|
char stack_size[50]; //0 - 49
|
|
|
|
struct Stack stack;
|
|
memset(&stack, 0, sizeof(struct Stack));
|
|
|
|
int x = 0;
|
|
|
|
scanf("%[^\n]", string);
|
|
|
|
strcpy(stack_size, string);
|
|
int i = 0;
|
|
|
|
while (i <= strlen(string)){
|
|
|
|
if (stack_size[i] != '[' && stack_size[i] != '(' && stack_size[i] != '{' && stack_size[i] != '<'){
|
|
|
|
}
|
|
|
|
else {
|
|
pushStack(&stack, stack_size[i]);
|
|
stack_size[i] = ' ';
|
|
x++;
|
|
}
|
|
|
|
if( stack_size[i] != ']' && stack_size[i] != ')' && stack_size[i] != '}' && stack_size[i] != '>'){
|
|
|
|
}
|
|
|
|
else {
|
|
if (x == 0){
|
|
printf ("Read: %s\nUnexpected closing bracket %c in %d\n",string, stack_size[i], i);
|
|
return 0;
|
|
}
|
|
|
|
char c = popStack(&stack);
|
|
if (c =='('){
|
|
c--;
|
|
}
|
|
|
|
if (c+2 != stack_size[i]){
|
|
printf("Read: %s\nCrossed bracket %c in %d, expected %c \n", string, stack_size[i], i, c+2);
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
i++;
|
|
//if () break;
|
|
}
|
|
|
|
if (stack.size > 0){
|
|
|
|
printf("Read: %s\nMissing closing brackets: ", string);
|
|
while (stack.size > 0){
|
|
char c = popStack(&stack);
|
|
if (c =='('){
|
|
c--;
|
|
}
|
|
printf("%c", c+2);
|
|
}
|
|
printf("\n");
|
|
|
|
return 0;
|
|
}
|
|
|
|
printf("Read: %s\nAll brackets OK\n", string);
|
|
|
|
|
|
|
|
return 0;
|
|
} |