C++:泛型编程stack(括号匹配)
描述
假设表达式中包含一种括号:圆括号,其嵌套顺序随意,即(()())或(())等为正确的格式,)(或((())或())均为不正确的格式。检验括号是否匹配可以用堆栈来实现当遇到 ( 时进栈,遇到 ) 时出栈进行匹配检验,如果出现不匹配的情况立即结束,否则继续取下一个字符。如果没有遇到不匹配的情况,最后判断栈是否为空,栈为空,括号匹配,否则不匹配。
输入
包括多组数据。每组1行,为包含括号的表达式。
输出
如果是正确的格式,输出“Yes”,否则输出“No”
样例输入
(()())
(())
(()
())
(
)
样例输出
Yes
Yes
No
No
No
No
#include<iostream>
#include <cmath>
#include<stack>
using namespace std;
int main()
{ char a[200];
stack <char> st;
int i=0;
while( cin>>a )
{
for( i=0;a[i]!=' '; i++)
{
if ( a[i]=='(' ) st.push( a[i]);
if ( a[i]==')' )
if ( !st.empty() && st.top()=='(' ) st.pop();
else break;
}
if( st.empty() && i==strlen(a) ) cout<<"Yes
";
else cout<<"No
";
while ( !st.empty() ) st.pop();
}
return 0;
}