题目
题目描述
判断包含有括号{,[,<,(,),>,],}组成的字符串是否匹配!
如输入:[ab{*(asdgasdfg)h<hpnip>adva}<a*&/h>]sdfsad,则匹配(match)
如输入:[ab(--<d345[dfa>}sdf]),则不匹配(mismatch)
{dsfg} [,则不匹配(mismatch)
即左右括号成对出现,并且顺序正确,叫作“匹配”!
输入
一行可能有空格的字符串
输出
如果匹配,则输出match否则输入mismatch
样例
输入样例#1
[ab{*(asdgasdfg)h<hpnip>adva}<a*&/h>]sdfsad
输出样例#1
match
输入样例#2
{dsfg} [
输出样例#2
mismatch
输入样例#3
)(
输出样例#3
mismatch
题目分析
一道简单的栈操作题目,具体流程如下
1、输入字符串
2、按位操作:
左括号:入栈
其他字母:不做操作
右括号:判空?
true:不匹配
false:栈顶是否匹配?
true:栈顶出栈
false:跳出循环
3、判空:
true:匹配
false:不匹配
完整代码
#include <bits/stdc++.h>
using namespace std;
int main()
{
stack<char>x;//定义栈
string n;
char temp;
int count=0;
getline(cin,n);//按行输入
while (n[count]!='\0')
{
if (n[count]=='<'||n[count]=='('||n[count]=='['||n[count]=='{')
{
x.push(n[count]);//左括号入栈
}
if (n[count]=='>'||n[count]==')'||n[count]==']'||n[count]=='}')//右括号判断是否匹配
{
switch (n[count])
{
case '>': temp='<';
break;
case ')': temp='(';
break;
case ']': temp='[';
break;
case '}': temp='{';
break;
}
if (x.empty())//判空
{
cout << "mismatch";
return 0;
}
if (x.top()==temp) x.pop();//括号匹配,出栈
else break;
}
count++;
}
if (x.empty()) cout << "match";//判空
else cout << "mismatch";
return 0;
}
码风比较特殊