今天有被打击到啊!哎!后悔了,好多繁琐事要去做,好了好了调整心态,好好准备自己的小项目吧!!今天问了士林兄一道题目,题目是这样的:
给你一串字符,不超过50个字符,可能包括括号、数字、字母、标点符号、空格,你的任务是检查这一串字符中的(?)?,[?],{?}是否匹配。
/***谢了士林兄哈哈,解决了开心
基本掌握了c++的栈的引用了
这道题我们来看看吧!!!***/
#include<bits/stdc++.h>
using namespace std;
#include<stack>
char a[101];
int main()
{
while(gets(a))
/***这里要用gets的整行多组输入,因为题目有空格***/
{
stack<char>zhf;
int lan=strlen(a);
int m=1;
for(int i=0; i<lan; i++)
{
if(a[i]!='{'&&a[i]!='['&&a[i]!='('&&a[i]!='}'&&a[i]!=']'&&a[i]!=')')
{
continue;
/**这个是用来去除无用字符的干扰的**/
}
else if(a[i]=='{'||a[i]=='['||a[i]=='(')
zhf.push(a[i]);
/***这个是符合条件入栈***/
else if(zhf.empty()&&(a[i]=='}'||a[i]==']'||a[i]==')'))
{
m=0;
break;
/***若为空栈并且开始的为},),]的情况则直接m=0,跳出去***/
}
else
{
if(a[i]==')'&&zhf.top()=='(')
{
m=1;
zhf.pop();
}
else if(a[i]=='}'&&zhf.top()=='{')
{
m=1;
zhf.pop();
}
else if(a[i]==']'&&zhf.top()=='[')
{
m=1;
zhf.pop();
}
else
{
m=0;
break;
}
/***else if
还是很好用的,哈哈哈
zhf.pop()一定要记得,不然就是一直栈顶了***/
}
}
if(m!=0&&zhf.empty())
{
cout<<"yes"<<endl;
}
else
{
cout<<"no"<<endl;
}
}
return 0;
}
这是我自己完整做出来,哈哈哈,看来还是要多问,多问问别人总能找到新方法
的
开始准备小项目了;
|