bool isValid(char * s){
char *str;
str=(char *)malloc(sizeof(strlen(s)) +1);
int top=0 , i=0;
str[0]=='a'
// 预留一个判空;
while(s[i]!='\0') //退出的条件;
{
// 左括号进栈;
if(s[i]=='(' || s[i]=='{' || s[i]=='[' )
{
top++;
str[top]=s[i];
}
else
{
//判段不退栈的条件;
if(s[i]==')'&&(str[top]=='{' || str[top]=='[' || str[top]=='a') )
return false;
else if(s[i]=='}' && (str[top]=='[' || str[top]=='(' || str[top)=='a )
return false;
else if(s[i]==']' && ( str[top]== '{' || str[top]=='(' || str[top]=='a') )
return false;
// 上述的情况都不满足时就执行退栈操作;
top--;
}
i++;
}
if(top!=0)
return false;
else
return true;
}
为什么在括号特别多的时候会发生;执行错误;
希望解释一下?
谢谢
这个程序主要存在两个问题,
1 top 可能达到int 的上线造成错误,改为long int ;
2 空间的申请写法不正确,
改为
n=strlen(s);
str=(char )malloc(sizeof(char)(n+1));