顺序表c++数据结构实验之栈四:括号匹配

来源:互联网 发布:cern数据 编辑:程序博客网 时间:2024/06/05 00:18

数据结构实验之栈四:括号匹配

Time Limit: 1000MS Memory limit: 65536K

题目描述

 给你一串字符,不超过50个字符,可能包括括号、数字、字母、标点符号、空格,你的任务是检查这一串字符中的( ) ,[ ],{ }是否匹配。

输入

 输入数据有多组,处理到文件结束。

输出

 如果匹配就输出“yes”,不匹配输出“no”

示例输入

sin(20+10){[}]

示例输出

yesno
#include <cstdio>#include <iostream>#include <algorithm>#include <cstring>#define sqmax 60using namespace std;typedef struct{    char*base;    char *top;    int sqsize;} sq;int init(sq &s);void push(sq &s,char n);char pop(sq &s);int empty(sq &s);int main(){    sq s;    int l,i,f;    char t[60];    //while(cin>>t)    while(gets(t)!=NULL)        /***注��空格�认为2个串***/    {        init(s);        f=0;        l=strlen(t);        for(i=0; i<l; i++)        {            if(t[i]=='('||t[i]=='['||t[i]=='{')                push(s,t[i]);            if(t[i]==')')            {                if(*s.top=='(')                    pop(s);                else                    f=1;            }            if(t[i]==']')            {                if(*s.top=='[')                    pop(s);                else                    f=1;            }            if(t[i]=='}')            {                if(*s.top=='{')                    pop(s);                else                    f=1;            }        }        if(!empty(s)||f==1)            cout<<"no\n";        else        {            cout<<"yes\n";        }    }}int init(sq &s){    s.base=(char *)malloc(sqmax *sizeof(char));    if(!s.base) exit(0);    s.top=s.base-1;    s.sqsize=sqmax;    return 1;}void push(sq &s,char n){    *++s.top=n;}char pop(sq &s){    return *s.top--;}int empty(sq &s){    if(s.top==s.base-1)        return 1;    else        return 0;}


0 0
原创粉丝点击