括号匹配的检验。
其中有个思想:
期待的急迫程度。
属实有些不理解。
这个题的意思应该是能检验出 小括号 和 中括号 的顺序。
比如[([][])]为正确格式,[(])、(( )])为不正确的格式。
自己写了个,但是只能实现一种括号的检验。
高手帮帮忙。期待的急迫程度应该怎么实现呢?
或者如何实现多种括号匹配的检验。非常感谢。^^
谢谢三楼的班竹。不过你好像理解错了。
这个题是检验括号的匹配。不过后来我想通了。
自己写了下算法。不知道还有没有什么遗漏的。
不匹配的情况:
1.来的右括弧非是所"期待"的;
2.来的是"不速之客";
3.直到结束,也没有到来所"期待"的。
这三种情况对应到栈的操作即为:
1.和栈顶的左括弧不相匹配;
2.栈中并没有左括弧等在哪里;
3.栈中还有左括弧没有等到和它相匹配的右括弧。
void Chack(){
//没有考虑垃圾数据的输入,约定只有()[ ]两种括号输入
InitStack(S); //构造空栈S
ch=getchar(); //接受第一个字符
while(ch!=='\n')
{
switch(ch){
case '( ':
case '[ ': Push(s,ch); break; //若为左括号,入栈
case ') ': if(StackEmpty(S))
{
pus("匹配不通过");
exit(1);
} //若第一个字符即为右括号,则一定不匹配
else{
GetTop(S,e);
if(e=='( ') Pop(S,e); //若匹配成功,删除栈顶元素
break;
}
case '] ': if(StackEmpty(S)){pus("匹配不通过");exit(1);}
else{
GetTop(S,e);
if(e=='[ ') Pop(S,e); //若匹配成功,删除栈顶元素
break;
}
}
ch=getchar();
}
if(StackEmpty(S)) puts("匹配通过"); //入栈出栈时都应为空,则匹配通过
else puts("匹配不通过");
}
[此贴子已经被作者于2007-2-13 20:57:03编辑过]