×

括号匹配

括号匹配?c语言的括号匹配问题

admin admin 发表于2022-05-13 10:20:04 浏览110 评论0

抢沙发发表评论

括号匹配

下面是我写的程序:你自己作个参考 :#include《stdio.h》#include《iostream.h》#include《stdlib.h》#include《malloc.h》typedef char ElemType;typedef struct stack{ ElemType data; struct stack *top;}LinkStack;int InitStack(LinkStack *&ls){ ls=NULL; return 1;}int ClearStack(LinkStack *&ls){ LinkStack *p; if(ls==NULL) return 0; while(ls!=NULL) { p=ls; ls=p-》top; free(p); } return 1;}int StackEmpty(LinkStack *ls){ if(ls==NULL) return 1; else return 0;}int StackLength(LinkStack *ls){ int i=0; LinkStack *p=ls; while(p!=NULL) { p=p-》top; i++; } return i;}ElemType GetTop(LinkStack *ls){ ElemType e; if(ls==NULL) return 0; e=ls-》data; return e;}int Push(LinkStack *&ls,ElemType e){ LinkStack *p; p=new struct stack[sizeof(LinkStack)]; p-》data=e; p-》top=ls; ls=p; return 1;}int Pop(LinkStack *&ls,ElemType &e){ LinkStack *p; if(ls==NULL) return 0; else { p=ls; e=p-》data; ls=p-》top; free(p); } return 1;}//8. 访问栈中元素void StackPrint(LinkStack *ls){ LinkStack *p=ls; if(ls==NULL) return ; while(p!=NULL) { cout《《p-》data《《“ “; p=p-》top; }}//9. 写一算法,利用栈操作判断一字符串是否是回文。int huiwen(ElemType str){ int i=0; ElemType ch,temp; LinkStack *ls; InitStack(ls); while((ch=str[i++])!=’\0’) Push(ls,ch); i=0; while(!StackEmpty(ls)) { Pop(ls,temp); if(temp!=str[i++]) return 0; } return 1;}//10. 利用栈的基本信息,编写一个算法输入若干整数,以0标识输入结束。然后按与输入相反的次序输出这些数。int Reverse(){ ElemType ch; LinkStack *ls; InitStack(ls); cout《《“请输入你要输入的整数:“; cin》》ch; while(ch!=48) { Push(ls,ch); cin》》ch; } while(!StackEmpty(ls)) { Pop(ls,ch); cout《《ch《《“ “; } return 1;}//12. 利用栈进行括号匹配检验。int Match(char str){ int i=0; LinkStack *ls; InitStack(ls); ElemType ch,e; while(str[i]!=’\0’) { if(str[i]==’(’||str[i]==’[’) { Push(ls,str[i]); ch=GetTop(ls); } else if(ch==’(’&&str[i]==’)’) else if(ch==’[’&&str[i]==’]’) else return 0; i++; } if(StackEmpty(ls)) return 1; else return 0;}void main(){cout《《endl《《“括号匹配:“《《endl; ElemType str2=“[[()()]]()()(())“; cout《《Match(str2);}

c语言的括号匹配问题

#include 《stdio.h》

#include 《stdlib.h》

int main()

{

    int i,count;

    char ch,ch1;

    while(gets(ch)!=NULL)

    {

        count=-1;

        for(i=0;ch[i]!=’\0’;i++)

        {

            if(ch[i]==’(’||ch[i]==’[’||ch[i]==’《’||ch[i]==’{’)

            {

                ch1[++count]=ch[i];

            }

            else

            {

                if(ch[i]-ch1[count]《3)

                {

                    count--;

                }

                else

                {

                    break;

                }

            }

        }

        if(count==-1)

            printf(“YES\n“);

        else

            printf(“NO\n“);

    }

    return 0;

}

括号匹配问题

#include《stdio.h》#define MAX 100int match(char *str){ char stack[MAX],*p=stack; while(*str) { switch(*str) { case ’(’: { *p++=*str; break; } case ’)’: { if(*--p!=’(’) return 0; break; } case ’[’: { *p++=*str; break; } case ’]’: { if(*--p!=’[’) return 0; break; } case ’{’: { *p++=*str; break; } case ’}’: { if(*--p!=’{’) return 0; break; } } str++; } if(stack==p) return 1; else return 0;}int main(){ char str[MAX]; gets(str); if(match(str)) { printf(“match\n“); } else { printf(“not match\n“); } return 0;}