写了一个括号匹配的算法,但最后输出的结果不如所料,找了好久也不知道问题出在哪里,最终测试可能是循环次数的问题。具体描述在下面代码里。
#include<iostream>
using namespace std;
#define maxSize 100
//建立一个字符栈
struct cStack
{
char data[maxSize];
int top;
};
//初始化栈函数
cStack initchs(cStack s)
{
//cstack s;
s.top=-1;
return s;
}
//入栈函数
cStack push(cStack s,char c)
{
if(s.top==maxSize)
{
cout<<"栈满,入栈失败!"<<endl;
return s;
}
else
{
s.data[++s.top]=c;
return s;
}
}
//出栈函数
cStack pop(cStack s)
{
if(s.top<0)
{
cout<<"栈空,出栈失败!"<<endl;
return s;
}
else
{
s.top--;
return s;
}
}
bool test06()
{
//初始化栈
cStack s;
s=initchs(s);
//cout<<s.top<<endl;//-1
int i=0;
char A[]={'{','{','[','(',')',']','}','}'};
/*while(A[i]!='\0')//测试能否正常输出
{
cout<<A[i]<<",";
i++;
}*/
while(A[i]!='\0')
{
switch(A[i])
{
case '{': s=push(s,'{');break;
case '[': s=push(s,'[');break;
case '(': s=push(s,'(');break;
case '}':
if(s.data[s.top]!='{')
{
cout<<"不匹配1!"<<endl;
return false;
}
s=pop(s);
break;
case ']':
if(s.data[s.top]!='[')
{
cout<<"不匹配2!"<<endl;
return false;
}
s=pop(s);
break;
case ')':
if(s.data[s.top]!='(')//if(s.data[s.top]!=')')
{
cout<<"不匹配3!"<<endl;
return false;
}
s=pop(s);
break;
default:
break;
}//switch
i++;
if(s.top==-1)
{
cout<<"匹配成功!"<<endl;
}
cout<<s.top<<endl;//0,1,2,3,2,1,0,匹配成功!-1,0,1,2,3
}//while
//当跳出while循环后,i的值为i=12,相当于循环了12次吗?但字符数组里只有8个字符,这是为什么呢?
cout<<"i="<<i<<endl;
cout<<"A[i]="<<A[i]<<endl;
if(s.top<0)
{
cout<<"匹配成功!"<<endl;
return true;
}
else
{
cout<<"匹配不成功!"<<endl;
cout<<s.top<<endl;//3
return false;
}
}
int main()
{
test06();
return 0;
}