c语言括号匹配
问题:题意描述:在算术表达式中,除了加、减、乘、除等运算外,往往还有括号。包括有大括号{},中括号[],小括号(),尖括号<>等。对于每一对括号,必须先左边括号,然后右边...
问题:
题意描述: 在算术表达式中,除了加、减、乘、除等运算外,往往还有括号。包括有大括号{},中括号[],小括号(),尖括号<>等。
对于每一对括号,必须先左边括号,然后右边括号;如果有多个括号,则每种类型的左括号和右括号的个数必须相等;对于多重括号的情形,按运算规则,从外到内的括号嵌套顺序为:大括号->中括号->小括号->尖括号。例如,{[()]},{()},{{}}为一个合法的表达式,而([{}]),{([])},[{<>}]都是非法的。
求解我的答案哪里错了,或者是还有什么特殊解啊
#include<stdio.h>
int main()
{
char c;
int bracket[300],i,l,n,j,k,flag;
scanf("%d",&n);
{
getchar();
for(i=0;i<n;i++)
{
for(j=0;;j++)
{
scanf("%c",&c);
if(c=='\n')
{
l=j;
break;
}
if(c=='<')//将括号用相应的数字表示
bracket[j]=1;
if(c=='(')
bracket[j]=2;
if(c=='[')
bracket[j]=3;
if(c=='{')
bracket[j]=4;
if(c=='>')
bracket[j]=-1;
if(c==')')
bracket[j]=-2;
if(c==']')
bracket[j]=-3;
if(c=='}')
bracket[j]=-4;
}
flag=1;
if(bracket[0]<0)
flag=0;
else
{
for(j=1,k=0;j<l;j++)//j表示当前的位置,k表示与其匹配的位置
{
if(bracket[j]>0)
{
if(bracket[j-1]>0 && bracket[j]>bracket[j-1])//括号要求必须按照{},[],(),<>的顺序从外到里
{
flag=0;
break;
}
k=j;// 如果出现新的左括号,则k移动到新出现的左括号出
}
if(bracket[j]<0)
{
if(bracket[j]+bracket[k]!=0)
flag=0;
else
{
bracket[j]=0;
bracket[k]=0;
while(bracket[k]==0)//将j移动到前面最靠近这里的一个左括号出
k--;
}
}
}
if(flag==1)
printf("YES\n");
else
printf("NO\n");
}
}
}
return 0;
} 展开
题意描述: 在算术表达式中,除了加、减、乘、除等运算外,往往还有括号。包括有大括号{},中括号[],小括号(),尖括号<>等。
对于每一对括号,必须先左边括号,然后右边括号;如果有多个括号,则每种类型的左括号和右括号的个数必须相等;对于多重括号的情形,按运算规则,从外到内的括号嵌套顺序为:大括号->中括号->小括号->尖括号。例如,{[()]},{()},{{}}为一个合法的表达式,而([{}]),{([])},[{<>}]都是非法的。
求解我的答案哪里错了,或者是还有什么特殊解啊
#include<stdio.h>
int main()
{
char c;
int bracket[300],i,l,n,j,k,flag;
scanf("%d",&n);
{
getchar();
for(i=0;i<n;i++)
{
for(j=0;;j++)
{
scanf("%c",&c);
if(c=='\n')
{
l=j;
break;
}
if(c=='<')//将括号用相应的数字表示
bracket[j]=1;
if(c=='(')
bracket[j]=2;
if(c=='[')
bracket[j]=3;
if(c=='{')
bracket[j]=4;
if(c=='>')
bracket[j]=-1;
if(c==')')
bracket[j]=-2;
if(c==']')
bracket[j]=-3;
if(c=='}')
bracket[j]=-4;
}
flag=1;
if(bracket[0]<0)
flag=0;
else
{
for(j=1,k=0;j<l;j++)//j表示当前的位置,k表示与其匹配的位置
{
if(bracket[j]>0)
{
if(bracket[j-1]>0 && bracket[j]>bracket[j-1])//括号要求必须按照{},[],(),<>的顺序从外到里
{
flag=0;
break;
}
k=j;// 如果出现新的左括号,则k移动到新出现的左括号出
}
if(bracket[j]<0)
{
if(bracket[j]+bracket[k]!=0)
flag=0;
else
{
bracket[j]=0;
bracket[k]=0;
while(bracket[k]==0)//将j移动到前面最靠近这里的一个左括号出
k--;
}
}
}
if(flag==1)
printf("YES\n");
else
printf("NO\n");
}
}
}
return 0;
} 展开
1个回答
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询