POJ 1690

好坑爹的一道字符串类型的模拟题,看来我就不适合做这种题,无论怎样简单,总会错几次才能对。

#include<cstdio>

#include<cstring>

using namespace std;

int main()

{

    int T;

    for(scanf("%d ",&T); T; T--)

    {

        char s[1000];

        char ans[1000];

        int st[1000];

        gets(s);

        int len,i,j,num=0;

        for(i=j=0; s[i]; i++)

        {

            if(s[i]==' ')

                continue;

            else if(s[i]=='(')

            {

                if(j>0&&ans[j-1]!='+'&&ans[j-1]!='(')

                    ans[j++]='(',st[num++]=1;

                else

                    st[num++]=-1;

            }

            else if(s[i]==')')

            {

                if(st[num-1]==-1)

                    num--;

                else if(ans[j-1]=='('||(j-2>=0&&ans[j-2]=='('))

                {

                    if(ans[j-1]=='(')

                        j--;

                    else

                        ans[j-2]=ans[j-1],j--;

                    num--;

                }

                else

                    ans[j++]=')',num--;

            }

            else

                ans[j++]=s[i];

        }

        ans[j]='\0';

        puts(ans);

    }

    return 0;

}

  

你可能感兴趣的:(poj)