问题描述
- c语言栈的平衡符号的问题
-
本人新手+小白一枚
这段程序看了n个小时修改改了很多次还是木有得到真谛,关键就在于check函数判断封闭符号是否和开放鼓号相匹配,一直也没有调试好,请教大神给我指点一下
int
CheckSymbol(Stack S,char str[])
{
int i,j;
for(i=0;i<10;i++)
{
if(str[i]=='{'||str[i]=='('||str[i]=='[')
{
Push(str[i],S);//如果是开放符号则压入栈for(j=i;j<10;j++) { if(str[j]=='}'&&S->Array[S->TopOfStack]=='{'||str[j]==')'&&S->Array[S->TopOfStack]=='('||str[j]==']'&&S->Array[S->TopOfStack]=='[') { return 0; Pop(S);//如果匹配则返回0并且弹出 } else return 1; } } else return 1; } }
main()
{
char str[10]="1[23";
Stack S;if(CheckSymbol(S,str)==0)
printf("match");
if(CheckSymbol(S,str)==1)
printf("no match");
}
解决方案
这个是栈常见应用之一。
如果遇到括号左边,就入栈,如果是右边,就出栈,最后如果栈为空,说明匹配成功,否则不成功。
下面是我自己写的一个简单测试代码,实现一个括号匹配函数。其中栈我是用字符数组实现的一个简单序列栈。没给出栈代码,你看你自己栈的实现。
void Match(char* a,int size)
{
int i;
for(i=0;i<size;i++)
{
if(a[i]=='('||a[i]=='['||a[i]=='{')//如果是括号左边
{
pushstack(a[i]);//入栈
}
else if(a[i]==')'||a[i]==']'||a[i]=='}')//如果是括号右边
{
popstack();//出栈
}
}
if(emptystack())//如果栈为空
printf("successn");//匹配成功
else//如果不为空
printf("not matchn");//匹配不成功
}
解决方案二:
谢谢你这么热心为我解答,我有一个问题,你怎么能知道符号是匹配的呢
解决方案三:
谢谢你这么热心为我解答,我有一个问题,你怎么能知道符号是匹配的呢
解决方案四:
一会儿我给你发个图片,演示一下,这个图片是拍的,比我实现的复杂。你看一下,它还会匹配 /*和*/。过程是开始栈为空,开始如果遇到左边就入栈,遇到右边
就出栈,出栈的是和最近遇到的右括号 匹配的左括号。如果最后栈空了,说明是匹配的,否则就不匹配。
时间: 2024-09-17 12:28:03