简单的栈的应用
#include <cstdio>
#include <cstdlib>
#include <algorithm>
#include <cstring>
#include <stack>
using namespace std;
const int MaxN = 110;
char s1[MaxN];
int len;
int invalid[MaxN];
struct node
{
int flag, indx; // flag == -1 左括号,flag == 1右括号
};
void solve()
{
memset(invalid, 0, sizeof(invalid));
len = strlen(s1);
stack<node> st;
node nd;
for(int i = 0; i < len; ++i)
{
if(s1[i] == '(')
{
nd.indx = i, nd.flag = -1;
st.push(nd);
}
if(s1[i] == ')')
{
if(st.size() && st.top().flag == -1)
st.pop();
else
{
nd.indx = i, nd.flag = 1;
st.push(nd);
}
}
}
while(st.size())
{
nd = st.top();
invalid[nd.indx] = nd.flag;
st.pop();
}
printf("%s\n", s1);
for(int i = 0; i < len; ++i)
{
if(invalid[i] == -1)
printf("$");
else if(invalid[i] == 1)
printf("?");
else
printf(" ");
}
printf("\n");
}
int main()
{
while(scanf("%s", s1) != EOF)
{
solve();
}
return 0;
}
/*
((ABCD(x)
)(rttyy())sss)(
*/
/*
((ABCD(x)
$$
)(rttyy())sss)(
? ?$
*/