• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

C语言实现括号匹配的方法

c语言 搞代码 4年前 (2022-01-06) 28次浏览 已收录 0个评论

这篇文章主要介绍了C语言实现括号匹配的方法,文中代码简单易懂,方便大家更好的学习,感兴趣的朋友可以参考下

1 要求

编写程序检查该字符串的括号是否成对出现,而且不能交叉出现。

输入:
一个字符串,里边可能包含“()”、”{}”、“[]”三种括号,“#”结束

输出:
成功:代表括号成对出现并且嵌套正确
失败:未正确使用括号字符。

2 分析

用一个栈,就能解决该问题,左括号栈顶字符必须和第一个入栈的右括号字符匹配。

栈介绍:栈是一种特殊的线性表,仅能在线性表的一端操作。

栈的特性:后进先出(LIFO)

由于正在学数据结构,于是栈的定义与操作都是自己编写的,为了巩固概念

3 代码

 #include #include  #define STACK_INT_SIZE 100 #define STACKINCREMENT 10 #define bool int   //自定义bool变量 #define SElemType char typedef struct { SElemType *base;  //栈基地址 SElemType *top;   //栈顶地址 int stacksize; } SqStack; //------基本操作的算法描述------ //构建一个空栈 bool InitStack(SqStack *S) { S->base = (SElemType *) malloc(STACK_INT_SIZE * sizeof(SElemType)); //开辟新的空间 if (!S->base) return 0;  //开辟失败返回0 S->top = S->base; S->stacksize = STACK_INT_SIZE; return 1; } //若栈不为空,返回栈顶元素,并返回true 否则返回 false bool GetTop(SqStack S) { if (S.top == S.base) return 0; return *(S.top - 1); } //插入元素 为新的栈顶元素 bool Push(SqStack *S, SElemType e) { if (S->top - S->base >= S->stacksize) //如果栈满 需要增加空间 { S->base = (SElemType *) realloc(S->base, (S->stacksize + STACKINCREMENT) * sizeof(SElemType)); if (!S->base) return 0; S->top = S->base + S->stacksize; S->stacksize += STACKINCREMENT; } *(S->top++) = e; return 1; } //若栈不为空,则删除栈顶元素,用e返回其值,返回true, 否则返回false bool Pop(SqStack *S, SElemType *e) { if (S->top == S->base) return 0; *e = *(--S->top); return 1; } //检查括号字符在字符集中的位置 int CheckChar(char c, char OP[]) { int i; for (i<strong style="color:transparent">来源gao@daima#com搞(%代@#码网</strong> = 0; i <3; i++) if (c == OP[i])return i; return 999; } int main() { SqStack OPTR; InitStack(&OPTR); Push(&OPTR, '#'); printf("输入括号以“#”结尾\n"); char c; c = getchar(); int m = 1;   //判断最终是否完全匹配 完全匹配 值为1,否则为0 char OP1[] = {'[', '(', '{'};  //前置括号字符集 char OP2[] = {']', ')', '}'};  //后置括号字符集 while (c != '#') { if (CheckChar(c, OP1) <3) { Push(&OPTR, c); c = getchar(); } else { if (CheckChar(GetTop(OPTR), OP1) == CheckChar(c, OP2)) { //如果需要检验的两个符号在前置和后置括号集中的位置相同则表示配对成功 //例如[和],[在前置括号集中的位置1,]在后置括号集中的位置1,所以匹配成功 Pop(&OPTR, &c); c = getchar(); continue; } else { m = 0; break; } } } if (GetTop(OPTR) != c)m = 0; if (m == 1)printf("\n括号完全匹配!"); else printf("\n括号匹配失败!"); return 0; } 

到此这篇关于C语言实现括号匹配的方法的文章就介绍到这了,更多相关C 实现括号匹配内容请搜索gaodaima搞代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持gaodaima搞代码网

以上就是C语言实现括号匹配的方法的详细内容,更多请关注gaodaima搞代码网其它相关文章!


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:C语言实现括号匹配的方法

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址