精华内容
下载资源
问答
  • #用来解决括号匹配问题挺简单的一道题,结果因为自己在写Push进行赋值的时候多写了一道等号,导致压入栈时出现乱码,我去!代码如下:#include#include#include#define Maxsize 50typedef char Datatype;typedef ...

    #用栈来解决括号匹配问题
    挺简单的一道题,结果因为自己在写Push进行赋值的时候多写了一道等号,导致压入栈时出现乱码,我去!代码如下:

    #include#include#include#define Maxsize 50typedef char Datatype;typedef struct{
    Datatype data[Maxsize];int top;}SqStack;void InitStack(SqStack *S){
    S->top=-1;}int StackEmpty(SqStack *S){if(S->top==-1)return 0;elsereturn 1;}int Push (SqStack *S,Datatype x){if(S->top==Maxsize-1)return 0;else
    S->data[++(S->top)]=x;return 1;}int Pop(SqStack *S, Datatype *x){if(S->top==-1)return 0;else*x=S->data[(S->top)--];return 1;}int GetTop(SqStack S,Datatype *x){if(S.top==-1)return 0;else*x=S.data[S.top];return 1;}int Bracketscheck(SqStack *S,char *str){InitStack(S);char e;int i=0;while(str[i]!='\0'){switch(str[i]){case '(':Push(S,'(');break;case '{':Push(S,'{');break;case '[':Push(S,'[');break;case ')':Pop(S,&e);if(e!='(')return 0;break;case '}':Pop(S,&e);if(e!='{')return 0;break;case ']':Pop(S,&e);if(e!='[')return 0;break;default:break;}
    i++;}int h=StackEmpty(S);if(h==1)return 0;elsereturn 1;}int main(){ SqStack S;char str[Maxsize];printf("请输入你要收入的字符串:");scanf("%s",str);int h=Bracketscheck(&S,str);if(h==0)printf("括号不匹配");elseprintf("括号匹配");return 0;
    }

    516b2b30496ba032c052de68e7ba8597.png

    原文连接:

    https://blog.csdn.net/lz846525719/article/details/82794989

    展开全文
  • 来解决括号匹配问题C语言

    万次阅读 多人点赞 2018-09-20 23:05:56
    #用来解决括号匹配问题 挺简单的一道题,结果因为自己在写Push进行赋值的时候多写了一道等号,导致压入栈时出现乱码,我去!代码如下: #include<stdio.h> #include<stdlib.h...

    #用栈来解决括号匹配问题
    挺简单的一道题,结果因为自己在写Push进行赋值的时候多写了一道等号,导致压入栈时出现乱码,我去!代码如下:

    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    #define Maxsize 50
    typedef char Datatype;
    typedef struct{
    Datatype data[Maxsize];
    int top;
    }SqStack;
    void InitStack(SqStack *S)
    {
        S->top=-1;
    }
    int StackEmpty(SqStack *S)
    {
        if(S->top==-1)
            return 0;
        else
            return 1;
    }
    int Push (SqStack *S,Datatype x)
    {
        if(S->top==Maxsize-1)
            return 0;
        else
            S->data[++(S->top)]=x;
            return 1;
    }
    int Pop(SqStack *S, Datatype *x)
    {
        if(S->top==-1)
            return 0;
        else
            *x=S->data[(S->top)--];
        return 1;
    }
    int GetTop(SqStack S,Datatype *x)
    {
        if(S.top==-1)
            return 0;
        else
            *x=S.data[S.top];
        return 1;
    }
    int Bracketscheck(SqStack *S,char *str)
    {
         InitStack(S);
         char e;
         int i=0;
         while(str[i]!='\0')
         {
             switch(str[i]){
         case '(':
                Push(S,'(');
                break;
         case '{':
            Push(S,'{');
            break;
         case '[':
            Push(S,'[');
            break;
         case ')':
            Pop(S,&e);
            if(e!='(')
                return 0;
            break;
         case '}':
            Pop(S,&e);
            if(e!='{')
                return 0;
            break;
         case ']':
            Pop(S,&e);
            if(e!='[')
                return 0;
            break;
           default:
            break;
    
             }
             i++;
         }
         int h=StackEmpty(S);
         if(h==1)
            return 0;
         else
            return 1;
    }
    int main()
    {    SqStack S;
        char str[Maxsize];
        printf("请输入你要收入的字符串:");
        scanf("%s",str);
        int h=Bracketscheck(&S,str);
        if(h==0)
            printf("括号不匹配");
        else
            printf("括号匹配");
        return 0;
    }
    
    
    展开全文
  • 现在,有一行括号序列,请你检查这行括号是否配对。 输入数据保证只含有"[","]","(",")"四种字符输出如果该字符串中所含的括号是配对的,则输出Yes,如果不配对则输出No 代码如下 #include #...

     现在,有一行括号序列,请你检查这行括号是否配对。
    输入
    数据保证只含有"[","]","(",")"四种字符
    输出
    如果该字符串中所含的括号是配对的,则输出Yes,如果不配对则输出No



    代码如下


    #include<stdio.h>
    #include<stdlib.h>
    #define SIZE 20
    #define CREMENT 10


    typedef struct{
    char *base;
    int top;
    int stacksize;
    }SqStack;


    //初始化 
    void InitStack(SqStack &S){
    S.base=(char *)malloc(SIZE*sizeof(char));
    if(!S.base) return ;
    S.top=0;
    S.stacksize=SIZE;
    }


    //判空 
    int StackEmpty(SqStack &S){
    if(S.top==0) return 1;
    else return 0;



    //入栈 
    void Push(SqStack &S,char e){
    if(S.top>=S.stacksize){
    S.base=(char *)realloc(S.base,(S.stacksize+CREMENT)*sizeof(char));
    if(!S.base) exit(0);
    S.stacksize+=CREMENT;
    }
    S.base[S.top++]=e;
    }


    //出栈 
    void Pop(SqStack &S,char &e){
    if(S.top==0) exit(0);
    else
    e=S.base[--S.top]; 
    }




    //括号匹配 
    int AllBrackets_Test(char *str) {
    char *p,ch;
    SqStack S;
    InitStack(S);
    for(p=str;*p;p++){
    if(*p=='(' || *p=='[' || *p=='{') 
    Push( S, *p );
    else if(*p==')' || *p==']' || *p=='}'){
    if(StackEmpty(S)) return 0;
    Pop( S,ch );
    if( *p==')' && ch!='(') return 0;
    if( *p==']' && ch!='[') return 0;
    if( *p=='}' && ch!='{') return 0; //不匹配返回0  
    }
    }
    if(StackEmpty(S))         //栈为空则匹配 
    {printf("匹配!\n") ;
    return 0;
    }
    else
    printf("不匹配!\n"); 
    }


    int main(){
    char a[100];
    printf("输入一串括号:\n");
    gets(a);
    AllBrackets_Test(a);
    return 0;
    }




    展开全文
  • 应用之括号匹配问题C语言版)

    千次阅读 2018-06-26 11:35:54
    来人!...一个字符串中有许多的括号! 例如字符串 ptr1[] = “a(()){[[]}]”; //次序 ptr2[] = “a(()){}[[]”; //左多 ptr3[] = “a(()){[[]]}]”; //右多 ptr4[] = “a(()){[[]]}”; //匹...

    来人!!上题目!

    一个字符串中有许多的括号! 例如字符串
    ptr1[] = “a(()){[[]}]”; //次序
    ptr2[] = “a(()){}[[]”; //左多
    ptr3[] = “a(()){[[]]}]”; //右多
    ptr4[] = “a(()){[[]]}”; //匹配
    通过我们的眼睛,我们不难看出这些字符串的括号是否匹配,但是一旦字符串过长,便无法用眼睛了!!
    于是乎,用一个函数、一串代码解决这个问题,不是特别煎蛋??

    恭迎大人阅读解题思路
    这里写图片描述

    小心翼翼给大人递上代码

    int Bracket(char ch)
    {
        if ('(' == ch || ')' == ch ||                         //判断该字符是否是括号字符
            '[' == ch || ']' == ch ||
            '{' == ch || '}' == ch)
            return 1;
        else
            return 0;
    }
    
    //用栈检测括号是否匹配
    void MatchBrackets(char* Ptr)
    {
        assert(Ptr);                                                                 //参数检测
    
    int size = strlen(Ptr);                                                      //求字符串长度
    int i = 0;
    StackD s;                                                                    //创建栈
    
    StackDInit(&s, size);                                                        //栈初始化,容量为size
    
    if (size == 0)                                                             //字符串为空
    {
        printf("无括号,匹配!! \n");
        return;
    }
    else                                                                         //字符串不为空
    {
        for (; i < size; i++)                                                    //从头开始一次判断 每个字符
        { 
            if (Bracket(Ptr[i]))                                                 //对字符进行判断,看其是否为括号字符
            {
                if ('(' == Ptr[i] || '[' == Ptr[i] || '{' == Ptr[i])             //字符为左边括号  入栈
                    StackDPush(&s, Ptr[i]);
                else                                                             //字符是右边括号
                {
                    if (StackDSize(&s) == 0)                                     //栈中没有左边括号,则说明右边括号多
                    {
                        printf("右边括号比左边括号多!!\n");
                        return;
                    }
                    else{                                                       //栈中有左边括号,判断是否匹配?  匹配则出栈一次,不匹配则说明括号次序不匹配!
                        char ch = StackDTop(&s);
                        if (ch == '(' && Ptr[i] == ')' ||
                            ch == '[' && Ptr[i] == ']' ||
                            ch == '{' && Ptr[i] == '}')
                            StackDPop(&s);
                        else
                        {
                            printf("括号次序不匹配 !!!\n");
                            return;
                        }
                    }
                }
            }
        }
        if (StackDSize(&s) != 0)                                               //判断完所有字符之后,判断栈中是否还有左边括号!
        {
            printf("左边括号比右边括号多!!\n");
            return;
        }
    }
    printf("括号匹配!!\n");
    }
    

    证据在此!!!
    这里写图片描述

    提醒:该函数调用了栈结构,关于栈结构的基本操作可以点这个链接
    https://blog.csdn.net/code_zx/article/details/80812635
    或者关注我,进主页查看哦

    这里写图片描述

    展开全文
  • 边进边匹配 #include <stdio.h> #include <stdlib.h> #include <stdbool.h> #define MaxSize 20 typedef struct { char data[MaxSize]; int top; }LNode; /*初始化*/ void Init(LNode *S)...
  • 括号匹配问题 的应用 C语言实现

    千次阅读 2007-09-09 20:59:00
    括号匹配问题的一个经典应用。程序基本 思路是这样的:遍历字符串,如果遇到左括号就入栈,如果遇到右括号就取栈顶元素,然后比较是否匹配,如果匹配就出栈删除相匹配的括号,如果不匹配就说明括号匹配失败。...
  • 括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。 注意空字符串可被认为是有效字符串。 示例 1: 输入: “()” 输出: true 示例 2: 输入: “()[]{}” 输出: true 示例 3: 输入: “(]” 输出: false...
  • 问题描述括号匹配问题,即给定一段文本text,括号是否有正确匹配的问题。括号由一个开括号如"("和一个闭括号")"组成,相互对应。这里只考虑三种括号,即"()","[]","{}"。此外括号括起的片段,也可能会嵌套。解决...
  • printf("括号完全匹配\n"); } if(*s->top>0) printf("左括号多余\n"); return Ok; } int main() { char e; Spstack s; printf("输入你要输入的括号\n"); Count(&s,...
  • 简洁的顺序解法
  • 1 解题思路构造包含顶指针,底指针和增量的...如果表达式括号匹配,则三种标志位都等于0,如果括号不匹配则标志位不等于0,最后输出结果。2 各函数功能// 构造一个空栈int InitStack(SqStack *S); // 让e入栈int Pu...
  • 括号匹配问题的应用) 可以只输入括号,不输入其他字符,方便验证(验证结果在最下方)。 添加了输出当前元素的函数。 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> #...
  • 数据结构-括号匹配算法及C语言实现

    千次阅读 2018-11-30 20:15:54
    1.在编写代码的时候,经常会用到两种括号:圆括号 “()” 和大括号 “{}” 。不管使用哪种括号,程序编译没有问题的其中一个重要因素就是所使用的括号是否能够...编写程序判断括号匹配问题的时候,使用结构会很容...
  • 在编写代码的时候,经常会用到两种括号:圆括号 “()” 和大括号 “{}” 。不管使用哪种括号,程序编译没有问题的其中一个重要因素就是所使用的括号是否...编写程序判断括号匹配问题的时候,使用结构会很容易:...
  • 请写一个程序,判断给定表达式中的括号是否匹配,既左右括号顺序和数量都匹配。 输入说明 输入为一个表达式字符串,长度不超过50。 输出说明 对输入的表达式,若其中的括号匹配的,则输出“yes”,否则输出“no...
  • 在编写代码的时候,经常会用到两种括号:圆括号 “()” 和大括号 “{}” 。不管使用哪种括号,程序编译没有问题的其中一个重要因素就是所...设计思路编写程序判断括号匹配问题的时候,使用结构会很容易:如果碰到...
  • 问题:假设表达式中允许包含三种括号,圆括号括号括号,嵌套顺序随意。 前提准备 #include <stdio.h> #include <stdlib.h> #define MAXSIZE 100 #include <string.h> #define NOMATCH -1//...
  • C语言实现括号匹配问题

    千次阅读 2020-03-09 12:17:29
    例如:{}[()]、{[()]}、()[]{}这种大中小括号成对出现(位置不限)则为括号匹配,反之则不匹配,如{()[ 接下来看一下实现方式 的定义以及相关操作 //的定义 typedef struct{ char elem[stack_size]; int top;...
  • printf("右括号比左括号多"); return; } else { GetTop(S,x); if(x=='{'&&a[i]=='}'||x=='['&&a[i]==']'||x=='('&&a[i]==')') { Pop(S,x); Pop(S,x); ...
  • 运用的知识当输入的字符串扫瞄时遇到左括号就进栈,右括号就弹。最后查看括号是否匹配
  • 利用顺序的操作函数 typedef char SElemType; #include"Stack.h" int kuohaopipei() { char p; SqStack s; char temp; InitStack(s); p=getchar(); while(p!='\n') { if(p=='('||p=='['||p=='{') Push(s,...
  • 题目描述现在,有一行括号序列,里面只包含”(“,”)”,”[“,”]”四种符号,请你检查这行括号是否配对。 如: []是匹配的 ([])[]是匹配的 ...定义一个计数器用来判断正反括号的数量,遇见 { 则count+1

空空如也

空空如也

1 2 3 4 5 ... 8
收藏数 141
精华内容 56
关键字:

括号匹配问题栈c语言

c语言 订阅