您的位置:首页 > 理论基础 > 数据结构算法

[SDUT](2134)数据结构实验之栈四:括号匹配 ---栈

2017-09-20 16:21 288 查看
Problem Description

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

Input

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

Output

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

Example Input

sin(20+10)

{[}]

Example Output

yes

no

AC代码:

#include<iostream>
#include<cstdio>
#include<stack>
#include<cstring>
using namespace std;
bool match(char exp[])//
{
stack<char>s;
int n = strlen(exp);
int i = 0;
char e;
bool flag = true;
while(i<n && flag)
{
if(exp[i] == '(')//当前字符为左括号时,将其进栈
s.push(exp[i]);
else if(exp[i] == ')') //当前字符为左括号时进行匹配操作
{
if(!s.empty())  //如果当前栈为非空证明有括号进入
{
e = s.top();  //取出栈顶元素
if(e != '(')  //如果栈顶元素不是右括号
flag = false; //标记为false
else
s.pop();//如果是右括号将其出栈
}
else  //无法取栈顶元素时证明里面未压入括号,也标记为false
flag = false;
}
if(exp[i] == '{')
s.push(exp[i]);
else if(exp[i] == '}')
{
if(!s.empty())
{
e = s.top();
if(e != '{')
flag = false;
else
s.pop();
}
else
flag = false;
}
if(exp[i] == '[')
s.push(exp[i]);
else if(exp[i] == ']')
{
if(!s.empty())
{
e = s.top();
if(e != '[')
flag = false;
else
s.pop();
}
else
flag = false;
}
i++;
}
if(!s.empty())
flag = false;
return flag;
}
int main()
{
char a[200];
while(gets(a))
{
if(match(a))
printf("yes\n");
else
printf("no\n");
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: