括号匹配:算法思想:利用栈的后进先出性质,编写的括号({[]})匹配算法,如果是{([])}形式的括号,显示匹配,如果是(}])[则显示不匹配,基本思想:
1.遇到左括弧,则进栈,
2.遇到右括弧,则和栈顶的括弧检验是否匹配,如果匹配,则将左括弧出栈
3.全部匹配时,栈应该是空
#include<stdio.h>
#include<stack>
using namespace std;
stack<int> S;
int main(){
char str[255];
int i=0,flag=0;
printf("Please input string:\n");
scanf("%s",str);
while(str[i]!='\0')
{
switch(str[i])
{
case '(':S.push(str[i]);break;//左括号压栈
case '[':S.push(str[i]);break;
case '{':S.push(str[i]);break;
case ')':
{
if(!S.empty())
{
if((S.top())!='(')flag=1;//右括号若不匹配返回错误
else S.pop();//若匹配,则出栈
}
else
flag=1;
break;
}
case ']':
{
if(!S.empty())
{
if((S.top())!='[')flag=1;
else S.pop();
}
else
flag=1;
break;
}
case '}':
{
if(!S.empty())
{
if((S.top())!='{')flag=1;
else S.pop();
}
else
flag=1;
break;
}
default:break;
}
if(flag)break;
i++;
}
if(!flag&&S.empty())//括号匹配并且最后栈为空
printf("You are right!the brackets is match!\n");
else//最后栈里剩下左括号
printf("Wrong!!the brackets isn't match!\n");
return 0;
}