符号匹配的核心思想是利用顺序栈来解决,此处的符号只有四类“{}”,“[]”,“<>”,“()”,输入一串符号 ,其中如果是“{[(<”这四种,则直接放入栈中,反正如果是“)}]>”这四类则要考虑栈中当前的符号是否与之对应,很显然,如果当前栈中的符号不匹配,那么符号必定不匹配。反之最后进行一系列入栈出栈后,这串字符串已经遍历完毕且栈为空,那么符号匹配成功。
代码如下
bool bracket(char *chars){
Stack<int> stack = Stack<int>(100);
int len=strlen(chars);
cout << len <<endl;
for(int i=0;i<len;i++){
char ch = chars[i];
if(ch=='{' || ch=='[' || ch=='(' || ch=='<'){
stack.Push(ch);
}else{
char temp = stack.Pop();
if(ch=='>'){
if(temp != '<'){
return false;
}
}else if(ch==')'){
if(temp != '('){
return false;
}
}else if(ch=='}'){
if(temp != '{'){
return false;
}
}else if(ch==']'){
if(temp != '['){
return false;
}
}
}
}
if(stack.IsEmpty()){
return true;
}
return false;
}