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

Description

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

Input

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

Output

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

Sample Input

sin(20+10)
{[}]

Sample Output

yes
no

= =这题就是一个简单的栈的应用,没有什么好说的,直接上代码。

代码

#include <iostream>
#include <cstdio>
#include <cstring>
#include <stack>

using namespace std;

int main()
{
    char str[55];
    while(gets(str)!=NULL)//注意题目中说了有空格,不要用scanf或cin
    {
        stack <char> a;//创造一个类型为char的栈
        int len=strlen(str),flag=1;//flag用来标记能不能匹配,能为1,不能为0
        for(int i=0;i<len;i++)
        {
            if(str[i]=='('||str[i]=='['||str[i]=='{')
               a.push(str[i]);//如果是左括号就插入到栈里
            else if(str[i]==')'||str[i]==']'||str[i]=='}')//如果是右括号
            {
                if(a.empty()||(str[i]==')'&&a.top()!='(')||(str[i]==']'&&a.top()!='[')||(str[i]=='}'&&a.top()!='{'))
                {         //如果此时栈为空或者栈顶元素与当前元素不匹配,则匹配失败,flag变为0,跳出循环
                    flag=0;
                    break;
                }
                else
                    a.pop();//如果当前元素与栈顶元素匹配,就将栈顶元素弹出,继续判断下一个
            }
        }
        if(!a.empty()||flag==0) printf("no\n");//如果遍历一遍后栈不为空,即使flag=1字符串中的括号也不匹配(例如"(()"这种情况)
        else printf("yes\n");
    }
    return 0;
}


 
  

你可能感兴趣的:(数据结构实验之栈四:括号匹配)