用栈判断字符串是否合格
2013-07-19 15:28
288 查看
用栈判断字符串是否合格
题目:输入一个由“【”“】”,“{”“}”“《”“》”组成的字符串,规则是可以嵌套,但不能交叉,判断这个字符串是否符合规则。
用栈,每次遇到右括号的时候就出栈,判断出栈元素是否是对应左括号即可。
本来认为很好写,眼高手低了。各种Debug了好几个小时。
代码+细节如下:
题目:输入一个由“【”“】”,“{”“}”“《”“》”组成的字符串,规则是可以嵌套,但不能交叉,判断这个字符串是否符合规则。
用栈,每次遇到右括号的时候就出栈,判断出栈元素是否是对应左括号即可。
本来认为很好写,眼高手低了。各种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; }
相关文章推荐
- 判断字符串是否为合格的IP地址
- 密码验证合格程序(判断字符串是否有重复子串)
- c++判断一个字符串是否是数字
- [QualityCenter]设置工作流脚本-根据某字段是否包含指定字符串来判断其他字段的选值
- Java判断中文字符串是否乱码
- 如何判断两个字符串是否互为变位词
- 【每日面试题】判断字符串是否对称
- 判断字符串1是否在字符串2中出现的方法
- 算法是代码的灵魂-判断一个字符串是否是回文字符串
- JS判断字符串是否包含中文
- 判断一个字符串是否是另一个字符串的子串(Implement strStr() )
- 判断字符串是否回文
- C语言 判断字符串是否回文
- 【字符串】判断两字符串是否互为旋转词?
- java判断字符串是否为数字或中文或字母
- 用递归的方法,判断某个字符串是否为回文
- [shell]判断一个字符串是否为数字字符串的两种方法(是否为进程号(PID))
- C# 判断字符串是否是22位数字
- Java中怎样判断一个字符串是否为数字
- Mysql字符串字段判断是否包含某个字符串的3种方法