一、括号匹配
这是我第一次写c博客,现在还是一个学生。可能写的不好,请多指教。
暑假在自学C++,今天用C++写了一个括号匹配,可能有点简单,不要笑话啦。
#include <iostream>
#include <stack>
#include <algorithm>
using namespace std;
bool Pei (char c1,char c2)//此处可以加更多的匹配设置{}和[]
{
if (c1=='('&&c2==')')
return true;
return false;
}
bool Jaje (int &num,stack<char>& comp)//引用传值
{
char c1,c2;
if (num>1)
{
c1=comp.top();
comp.pop();
c2=comp.top();
if (Pei(c2,c1))//因为c2在c1前面
{
num-=2;
comp.pop();
Jaje(num,comp);
return true;
}
else
{
comp.push(c1);
return false;
}
}
return false;
}
int main()
{
stack<char> comp;
int num=0;
char c;
string s,s1;
cin>>s;
for (int i=0;i<s.size();i++)
{
comp.push(s[i]);
num++;
Jaje(num,comp);
}
if (num==0)
{
cout<<"yeas"<<endl;
}
else {
cout<<"剩余数目="<<num<<endl;
cout<<"是:";
while (!comp.empty())
{
s1+=comp.top();
comp.pop();
}
reverse(s1.begin(),s1.end());//reverse因为是栈所以要翻转
cout<<s1<<endl;
}
}
简单解释一下采用stack容器,stack.pop()出栈,stack.push()进栈,stack.top()返回最上面的值。
如果括号匹配的话,就打印yeas,否则输出剩余栈内的值。考虑的不多,销毁和回收都没考虑了。