字符串匹配问题

【问题描述】
       字符串中只含有括号 (),[],<>,{},判断输入的字符串中括号是否匹配。如果括号有互相包含的形式,从内到外必须是<>,(),[],{},例如。输入: [()] 输出:YES,而输入([]), ([])都应该输出NO。
【输入格式】strs.in
       文件的第一行为一个整数n,表示以下有多少个由括好组成的字符串。接下来的n行,每行都是一个由括号组成的长度不超过255的字符串。
【输出格式】strs.out
       在输出文件中有N行,每行都是YES或NO。
【输入样例】
5
{}{}<><>()()[][]
{{}}{{}}<<>><<>>(())(())[[]][[]]
{{}}{{}}<<>><<>>(())(())[[]][[]]
{<>}{[]}<<<>><<>>>((<>))(())[[(<>)]][[]]  
><}{{[]}<<<>><<>>>((<>))(())[[(<>)]][[]]
【输出标例】
YES
YES
YES
YES
NO
错误代码典例made by 吴成志
 
#include<stack>
#include<string>
#include<iostream>
using namespace std;
string s;
stack<int>str;

int main()
{
int su=9;
cin>>s;
for(int i=0;i<s.size();++i)
{
if(s[i]=='(')str.push(2);
if(s[i]=='[')str.push(3);
if(s[i]=='<')str.push(1);
if(s[i]=='{')str.push(4);
if(s[i]==')'||s[i]==']'||s[i]=='>'||s[i]=='}')
if(str.empty())
{
su=9;    str.pop();
}
if(str.empty()>1)
if(str.top()>su)
{
cout<<"NO";
return 0;
}
su=str.top();
}
if(str.empty())cout<<"NO";
else cout<<"OK";
return 0;
}

 

posted @ 2017-03-27 21:59  zzzzx  阅读(1270)  评论(0编辑  收藏  举报