您的位置:首页 > 其它

用栈判断字符串是否合格

2013-07-19 15:28 288 查看
用栈判断字符串是否合格
     题目:输入一个由“【”“】”,“{”“}”“《”“》”组成的字符串,规则是可以嵌套,但不能交叉,判断这个字符串是否符合规则。

     用栈,每次遇到右括号的时候就出栈,判断出栈元素是否是对应左括号即可。

     本来认为很好写,眼高手低了。各种Debug了好几个小时。

     代码+细节如下:

    

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10
typedef struct sqstack{
char *base; /*变量类型定义的是指针内的元素,*/
char *top;  /*至于下面指针做加减比较相等比较的是相对位置所代表的的数字。*/
int stacksize;
}sqstack;
int initstack(sqstack *S){
S->base = (char *)malloc(STACK_INIT_SIZE*sizeof(char));
if(!S->base)
return -1;
S->top = S->base;
S->stacksize = STACK_INIT_SIZE;
return 1;

}
int push(sqstack *S,char e){
if(S->top-S->base>=S->stacksize){
S->base = (char *)realloc(S->base,(S->stacksize+STACKINCREMENT)*sizeof(char));
if(!S->base)
return 0;
S->top = S->base+S->stacksize;
S->stacksize = S->stacksize+STACKINCREMENT;

}
*(S->top)= e; /*注意括号。*/
S->top++;
return 1;

}
int pop(sqstack *S,char *g){
if(S->top==S->base)
return -1;
S->top--;
*g = *(S->top); /*左边*取址,右边*取值。*/
return 0;

}

int main(){
int m,f,i;
char g;
sqstack S;
char a[100];
initstack(&S);
scanf("%s",a);
m = strlen(a)-1;
f = 1;
for(i = 0;i<=m;i++){
if(a[i]=='{'||a[i]=='['||a[i]=='<'){
push(&S,a[i]);
}
else{
pop(&S,&g); /* & 操作变量。*/
if(g=='{'&&a[i]!='}'){
f = 0;
break;
}
if(g=='['&&a[i]!=']'){
f = 0;
break;
}
if(g=='<'&&a[i]!='>'){
f = 0;
break;
}
}
}
if(f == 1) /*以前看到说这里只写一个 = 是可以运行的还不信,*/
printf("correct\n"); /*自己写错了证明是可以运行的。当然运行结果是错误的。*/
else
printf("wrong\n");
return 0;
}


 

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: