c言語でカッコマッチングアルゴリズムを実現
2331 ワード
/* */
#include<stdio.h>
#define FALSE 0
#define TRUE 1
#define MAXSIZE 100
typedef char DataType;
//
typedef struct stack{
DataType data[MAXSIZE];
int top;
}SeqStack;
//
void InitStack(SeqStack *s)
{
s->top = -1;
}
//
int IsEmpty(SeqStack *s)
{
if(s->top == -1)
return TRUE;
return FALSE;
}
//
int IsFull(SeqStack *s)
{
if(s->top == MAXSIZE-1)
return TRUE;
return FALSE;
}
//
void PopStack(SeqStack *s, DataType temp)
{
if(IsEmpty(s))
return;
temp = s->data[s->top];
s->top --;
}
//
void PushStack(SeqStack *s,DataType temp)
{
if(IsFull(s))
return;
s->top ++ ;
s->data[s->top]=temp;
}
//
int Match(char chone,char chtwo)
{
if(chone=='(' && chtwo==')')
return TRUE;
else if(chone == '{' && chtwo == '}')
return TRUE;
else if(chone == '[' && chtwo == ']')
return TRUE;
else
return FALSE;
}
//
void GetTopStack(SeqStack *s , DataType *temp)
{
if(IsEmpty(s))
return;
*temp = s->data[s->top];
}
void BracketMatch(char *str)
{
SeqStack s;
int i;
char ch;
InitStack(&s);
for(i=0 ; str[i]!='\0';i++ )
{
switch(str[i]){
case '(':
case '[':
case '{':
PushStack(&s,str[i]);
break;
case ')':
case ']':
case '}':
if(IsEmpty(&s))
{
printf("
");
return;
}else{
GetTopStack(&s,&ch);
if(Match(ch,str[i]))
PopStack(&s,ch);
else{
printf("
");
return;
}/*if*/
}/*else*/
}/*for*/
}/*switch*/
if(IsEmpty(&s))
printf("
");
else
printf("
");
}
int main()
{
char str[MAXSIZE];
int i;
printf("Input the bracket string:
");
scanf("%s",str);
BracketMatch(str);
return 1;
}