Verifying absence of brackets and parentheses
Hi People, good morning. The program has to output curly brackets, square brackets and/or parentheses in case of absences. E.g.:
Code:
1) [thames --> [thames]
2) thames] --> [thames]
3) (thames[thames{thames --> (thames)[thames]{thames}
4) thames --> (thames) or [thames] or {thames} (what I choose)
I only know how to deal with the first case. I wish you could explain me how I can deal with the other three.
Code:
#include <stdio.h>
#include <stdlib.h>
#define MAXLINE 100
enum syntax_states {
NORMAL_CHAR = 0,
PARENTHESES_BEGIN,
PARENTHESES_END,
SQUARE_BRACKETS_BEGIN,
SQUARE_BRACKETS_END,
CURLY_BRACKETS_BEGIN,
CURLY_BRACKETS_END
};
int main(void)
{
int c;
int i = 0;
char s[MAXLINE];
enum syntax_states state = NORMAL_CHAR;
while(EOF != (c = fgetc(stdin)))
{
if(c != '\n')
{
s[i++] = c;
}
switch(state)
{
case NORMAL_CHAR:
if(c == '[')
state = SQUARE_BRACKETS_BEGIN;
else if(c == '{')
state = CURLY_BRACKETS_BEGIN;
else if(c == '(')
state = PARENTHESES_BEGIN;
break;
case SQUARE_BRACKETS_BEGIN:
if(c == '\n' && s[i-1] != ']')
{
s[i++] = ']';
state = NORMAL_CHAR;
}
break;
case SQUARE_BRACKETS_END:
// ??
case CURLY_BRACKETS_BEGIN:
if(c == '\n' && s[i-1] != '}')
{
s[i++] = '}';
state = NORMAL_CHAR;
}
break;
case PARENTHESES_BEGIN:
if(c == '\n' && s[i-1] != ')')
{
s[i++] = ')';
state = NORMAL_CHAR;
}
break;
}
}
s[i] = '\0';
fputs(s, stdout);
return 0;
}