sdut 2134 数据结构实验之栈与队列四:括号匹配

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

Time Limit: 1000MS  Memory Limit: 65536KB
Problem Description

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

 

Input

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

 

Output

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

 

Example Input
sin(20+10)
{[}]
Example Output
yes
no
利用栈的思想遇到({ [时进栈,遇到)] }就看栈顶元素与之是否匹配,匹配栈顶元素则出栈,否则 false 
#include  <iostream>
#include <cstring>
#include <stdio.h>
using namespace std;
int tag;
int match(char ST[],char ch,int &k)
{
    if(ch==')'&&ST[k]=='('||ch==']'&&ST[k]=='['||ch=='}'&&ST[k]=='{')
    {
        tag=1;
        k--;
    }
    else
        tag=0;

}
int main()
{
    char ch[52];
    while(gets(ch))
    {
        char ST[52];
        int k=-1;
        for(int i=0;ch[i]!='\0';++i)
        {
            switch(ch[i])
            {
            case '(':
            case '[':
            case '{':ST[++k]=ch[i];break;
            case ')':
            case ']':
            case '}': match(ST,ch[i],k);break;
            }
        }
        if(tag&&k==-1)
            cout<<"yes"<<endl;
        else
            cout<<"no"<<endl;
    }
    return 0;
}
下面的是刚开始写的忘记考虑 ( ) ( )这种情况了
#include  <iostream>
#include <cstring>
#include <stdio.h>
using namespace std;
int match(char ST[],int k)
{
    if(k==0||k%2!=0)
    {
        cout<<"no"<<endl;
        return 0;
    }
    int j=k-1;
    int i;
    for(i=0;i<(k/2);i++)
    {
        switch(ST[i])
        {
            case '(':if(ST[j]==')')
                          j--;
                      else
                      {
                        cout<<"no"<<endl;
                            return 0;
                      }
                          break;
            case '[':if(ST[j]==']')
                      j--;
                      else
                      {
                         cout<<"no"<<endl;
                           return 0;
                       }
                      break;
            case '{':if(ST[j]=='}')
                      j--;
                      else
                        {
                         cout<<"no"<<endl;
                            return 0;
                        }
                      break;
            default :
                {
                    cout<<"no"<<endl;
                    return 0;
                }
                break;
        }
    }
    //if(i==k/2)
    cout<<"yes"<<endl;
    return 0;
}
int main()
{
    char ch[52];
    while(gets(ch))
    {
        char ST[52];
        int k=0;
        for(int i=0;ch[i]!='\0';++i)
        {
            switch(ch[i])
            {
            case '(':
            case '[':
            case '{':
            case ')':
            case ']':
            case '}':ST[k++]=ch[i];break;
            }
        }
        ST[k]='\0';
       match(ST,k);
    }
    return 0;
}


/***************************************************
User name: YT1658506207邵雪源
Result: Wrong Answer
Take time: 0ms
Take Memory: 204KB
Submit time: 2017-10-10 17:56:27
****************************************************/



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值