簡單的括號匹配算法

 

typedef char DataType;

#include "SeqStack.h"
#include<iostream.h>
#include<stdlib.h>
#include<string.h>
#include<stdio.h>


#define LEFT_FUHAO "([{<"
#define RIGHT_FUHAO ")]}>"

#define  BUFFER_SIZE 1000

char Buffer[BUFFER_SIZE];

//是否爲括號,不是返回-1,是左邊的返回0,右邊的返回1
int IsLeftOrRight(char & c);
//匹配函數,匹配爲1, 不匹配爲0
int IsMatch(char srcChar, char desChar);

int main()
{
 int mainLength = 3;
 SeqStack stack;
 while (1)
 {

 cout<<"輸入一個括號串看是否匹配!"<<endl;
 gets(Buffer);
 mainLength = strlen(Buffer);
// char Buffer[3] = {'<','>',' '};

 
 
 
 for ( int i = 0; i < mainLength; i++)
 {//是左邊的括號
  if ( IsLeftOrRight(Buffer[i]) == 0)
  {
   stack.Push(Buffer[i]);
  }//是右邊的括號,進行下一步處理
  else if ( IsLeftOrRight(Buffer[i]) == 1)
  {
   if ( IsMatch(stack.Pop(),Buffer[i]) == 1)
   {//一定要考慮是否比較完成
    if ( stack.StackEmpty() && i == mainLength-1)
    {
     cout<<"匹配!"<<endl;
     break;
    }
    //cout<<"Not match!"<<endl;
   
   }
   else
   {
    cout<<"不匹配!/n";
    break;
   }
  }
  else
  {
   if ( i == mainLength -1)
   {
    cout<<"不匹配!"<<endl;
    break;
   }
   continue;
  }

 }
 }
 return 1;
}

//是否爲括號,不是返回-1,是左邊的返回0,右邊的返回1
int IsLeftOrRight(char & c)
{
 char *strTempLeft = new char[4];
 char *strTempRight = new char[4];
 strcpy(strTempLeft,LEFT_FUHAO);
 strcpy(strTempRight,RIGHT_FUHAO);

 for (int i = 0; i < 4; i++)
 {
  if ( strTempLeft[i] == c)
  {
   return 0;//左邊的返回0
  }
  else if ( strTempRight[i] == c)
  {
   return 1;//右邊的返回1
  }
 }//都不是則返回-1
 return -1;
}

//匹配函數,匹配爲1, 不匹配爲0
int IsMatch(char srcChar, char desChar)
{
 switch ( srcChar)
 {
  case '(':
   if ( desChar == ')')
   {
    return 1;
   } 
    return 0;
    break;//not must
  case '[':
   if ( desChar == ']')
   {
    return 1;
   } 
    return 0;
   break;
  case '{':
   if ( desChar == '}')
   {
    return 1;
   } 
    return 0;
   break;
  case '<':
   if ( desChar == '>')
   {
    return 1;
   } 
    return 0;
   break;
  default:
   return 0;
   break;
 }
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章