1、给定字符串,输出括号是否匹配,例如,"()" yes;")(" no;"(abcd(e)" no;"(a)(b)" yes。
A)使用非递归实现
B)用递归实现,不能出现循环
#include <iostream>
using namespace std;
bool bracketMatch_NoRecursive(const char* str)
{
int count = 0;
while(*str != '\0')
{
if (*str=='(')
{
++count;
}
if (*str==')')
{
--count;
}
if (count<0)
{
return false;
}
++str;
}
if (count!=0)
{
return false;
}
else
{
return true;
}
}
bool bracketMatch_Recursive(const char* str)
{
static int count = 0;
if (*str=='(')
{
++count;
}
if (*str==')')
{
--count;
}
if (count<0)
{
return false;
}
else if (*str=='\0')
{
if (count!=0)
{
return false;
}
else
{
return true;
}
}
else
{
++str;
return bracketMatch_Recursive(str);
}
}
void main()
{
char *str = ")(abd)(dfdfdf)";
//char *str = "(abd)(dfdfdf)";
//char *str = "(abd)(dfdfdf)(((((";
//if (bracketMatch_NoRecursive(str))
if (bracketMatch_Recursive(str))
{
cout<<str<<" : 匹配"<<endl;
}
else
{
cout<<str<<" : 不匹配"<<endl;
}
system("pause");
return ;
}