用顺序栈解决括号匹配问题
测试代码
#include <stdio.h>
#include <string.h>
#define MaxStackSize 100
typedef char DataType;
#include "SeqStack.h"
void ExpIsCorrect(char exp[], int n){ //判断有n个字符的字符串exp,左右括号是否匹配正确
SeqStack myStack;
int i;
char c;
StackInitiate(&myStack); //初始化栈
for(i=0;i<n;i++){
/*================一下是匹配算法,穷举==============================*/
if( ( exp[i]=='(' )|| ( exp[i]=='[' )|| ( exp[i]=='{' ) ){
StackPush(&myStack, exp[i]); //入栈
}else if( exp[i]==')' && StackNotEmpty(myStack) && StackTop(myStack,&c) && c=='(' ){
StackPop(&myStack,&c); //()匹配正确,出栈
}else if( exp[i]==')' && StackNotEmpty(myStack) && StackTop(myStack,&c) && c!='(' ){
printf("【()】括号匹配不正确!\n");
return;
}else if( exp[i]==']' && StackNotEmpty(myStack) && StackTop(myStack,&c) && c=='[' ){
StackPop(&myStack,&c); //()匹配正确,出栈
}else if( exp[i]==']' && StackNotEmpty(myStack) && StackTop(myStack,&c) && c!='[' ){
printf("【[]】括号匹配不正确!\n");
return;
}else if( exp[i]=='}' && StackNotEmpty(myStack) && StackTop(myStack,&c) && c=='{' ){
StackPop(&myStack,&c); //()匹配正确,出栈
}else if( exp[i]=='}' && StackNotEmpty(myStack) && StackTop(myStack,&c) && c!='{' ){
printf("【{}】括号匹配不正确!\n");
return;
}else if( ( exp[i]==')' )|| ( exp[i]==']' )|| ( exp[i]=='}' )&& !StackNotEmpty(myStack) ){
printf("右括号多余左括号!\n");
return;
}
}
if(StackNotEmpty(myStack)){
printf("左括号多余有括号!\n");
}else{
printf("括号匹配正确!\n");
}
}
int main(){
char num1[] = "(())abc{[]()}"; //测试1,括号配对次序不正确
char num2[] = "(()))abc{[]}" ; //测试2,右括号多余左括号
char num3[] = "(()()abc{[]}" ; //测试3,左括号多余有括号
char num4[] = "(())abc{[()]}" ; //测试4,匹配正确
int n1 = strlen(num1); //计算出字符串的长度
int n2 = strlen(num2);
int n3 = strlen(num3);
int n4 = strlen(num4);
ExpIsCorrect(num1,n1);
ExpIsCorrect(num2,n2);
ExpIsCorrect(num3,n3);
ExpIsCorrect(num4,n4);
printf("\n");
system("pause");
return 0;
}