您的位置:首页 > 其它

判断括号是否匹配的递归与非递归实现

2013-09-16 00:22 309 查看
递归:

int bracket(char *p, int count)
{
if (*p == '\0')
return count;
else if (*p == '(')
return bracket(p + 1, count++);
else if (count > 0 && *p == ')')
return bracket(p + 1, count--);
else if (count <= 0 && *p == ')')
return -1;
return bracket(p + 1, count);
}


非递归:(可以包含多种括号)

bool match(char a,char b)
{
if(a=='('&&b==')')
return true;
if(a=='['&&b==']')
return true;
if(a=='{'&&b=='}')
return true;
return false;
}
bool Bice(char* s)
{
int i,n=strlen(s),top=-1;
char *st=new char
;
for(i=0;i<n;i++)
{
if(s[i]==')'||s[i]==']'||s[i]=='}')
{
if(top>=0&&match(st[top],s[i]))
top--;
else
return false;
}
else if(s[i]=='('||s[i]=='['||s[i]=='{')
st[++top]=s[i];
}
if(top==-1)
return true;
return false;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: