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

时间:2020-11-26 06:01:49

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

Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic

Problem Description

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

Input

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

Output

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

Example Input

sin(20+10){[}]

Example Output

yesno

Hint

 

Author

ma6174
1N:
#include <bits/stdc++.h>using namespace std;int main(){    char s[111];    char stac[111];    int top=0,k,t=0,i;    while(gets(s))//字符串输入gets以回车结束,scanf以空格和回车结束    {        k=strlen(s);        top=0;        t=0;        for(i=0; i<k; i++)        {            if(s[i]=='('||s[i]=='['||s[i]=='{')                stac[++top]=s[i];            else if(s[i]==')'||s[i]==']'||s[i]=='}')            {                char a=stac[top];                if((a=='('&&s[i]==')')||(a=='['&&s[i]==']')||(a=='{'&&s[i]=='}'))                    {                    top--;                    }                else                {                    t=1;                }            }            if(t==1)                break;        }        if(top==0&&t==0&&i==k)        {            cout<<"yes";        }        else        {            cout<<"no";        }        cout<<endl;    }    return 0;}
2N:
#include <bits/stdc++.h>using namespace std;int top=0,n,i,j;int main(){    char str[55],stacks[55];    while(gets(str)!=NULL)    {        int t=1;        n=strlen(str);        top=0;        for(i=0; i<n&&t==1; i++)        {            if(str[i]=='('||str[i]=='['||str[i]=='{')            {                stacks[top++]=str[i];            }            else if(str[i]==')')            {                if(top!=0)                {for(j=top-1; j>=0; j--)                {                    if(stacks[j]=='(')                    {                        break;                    }                    if(stacks[j]=='['||stacks[j]=='{')                    {                        t=0;                        break;                    }                }                if(t==1)                {                    while(top!=j)                    {                        top--;                    }                }                }                else                {                    t=0;                }            }            else if(str[i]==']')            {                if(top!=0)                {for(j=top-1; j>=0; j--)                {                    if(stacks[j]=='[')                    {                        break;                    }                    if(stacks[j]=='('||stacks[j]=='{')                    {                        t=0;                        break;                    }                }                if(t==1)                {                    while(top!=j)                    {                        top--;                    }                }                }                else                {                    t=0;                }            }            else if(str[i]=='}')            {                if(top!=0)                {for(j=top-1; j>=0; j--)                {                    if(stacks[j]=='{')                    {                        break;                    }                    if(stacks[j]=='['||stacks[j]=='(')                    {                        t=0;                        break;                    }                }                if(t==1)                {                    while(top!=j)                    {                        top--;                    }                }                }                else                {                    t=0;                }            }        }        if(top!=0)        {            t=0;        }        if(t==1)        {            cout<<"yes";        }        else        {cout<<"no";}        cout<<endl;    }    return 0;}