用栈来进行验证括号的匹配。
在编程当中会遇到三种括号:圆括号()、方括号[],花括号{},编译器在编译的时候会检查括号是否匹配正确。例如{[()]}、{(){}[]}都是合法的匹配。但是([)]则不是合法的匹配。请编写一个程序来判断输入的括号序列是否合法。
*思路:*遇到左括号时进栈,遇到右括号且栈不为空并且与栈顶括号匹配时出栈。当遍历完所有括号后如果栈为空则表明括号匹配。
#include<iostream>
#include<string>
using namespace std;
int main()
{
string n;
cin>>n;
char s[50];
int i,top=0;
for(i=0;i<n.length();i++)
{
if(n[i]=='{'||n[i]=='['||n[i]=='(') //左括号
s[++top]=n[i];//进栈
else
{
if(top==0) { cout<<"不匹配";break;}
else
{
switch (n[i])
{
case ')':if(s[top]=='(') top--;else { cout<<"不匹配";break;}break;
case ']':if(s[top]=='[') top--;else { cout<<"不匹配";break;}break;
case '}':if(s[top]=='{') top--;else { cout<<"不匹配";break;}break;
}
}
}
}
if(top==0) cout<<"匹配"<<endl;
return 0;
}
如上述程序有问题,请大神给新手小白指教指教!!!