URAL 1993 This cheeseburger you don't need

http://acm.timus.ru/problem.aspx?space=1&num=1993

题意:题目中那么多英语直接就没看,看了样例知道是什么意思了,就是给你一个字符串,算是一个句子,若是复杂句,是有“ ,”作为分割为两个句子的,若是不加任何括号的就原样输出,若是有括号的先输出花括号里的,再输出中括号里的,再输出小括号里的,每一句话只有第一个字母大写。

思路 :模拟题吧,一向挺烦的,万一哪个细节没注意到就容易出错。

#include<cstdio>

#include<cstring>

#define maxn 1000

using namespace std;

char s[maxn],s1[maxn];

int a[maxn],b[maxn];

int main()

{

    while(gets(s))

    {

        int m,t;

        int k=strlen(s);

        bool flag=false;

        for(int i=0; i<k; i++)

        {

            if(s[i]=='{'||s[i]=='('||s[i]=='[')

            {

                s[i+1]+=32;

                break;

            }

        }

        for(int i=0; i<k; i++)

        {

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

            {

                flag=true;

                m=i;

                break;

            }

        }

        if(!flag)

        {

            for(int i=0; i<k; i++)

            {

                if(s[i]=='{') a[1]=i;

                else if(s[i]=='(') a[2]=i;

                else if(s[i]=='[') a[3]=i;

                else if(s[i]=='}') b[1]=i;

                else if(s[i]==')') b[2]=i;

                else if(s[i]==']') b[3]=i;

            }

            t=1;

            while(t<=3)

            {

                for(int j=a[t]+1; j<b[t]; j++)

                {

                    if(t==1&&j==a[t]+1)

                    printf("%c",s[j]-32);

                    else printf("%c",s[j]);

                }

                if(t!=3) printf(" ");

                t++;

            }

            printf("\n");

        }

        else if(flag)

        {

            for(int i=0; i<m; i++)

            {

                if(s[i]=='{') a[1]=i;

                else if(s[i]=='(') a[2]=i;

                else if(s[i]=='[') a[3]=i;

                else if(s[i]=='}') b[1]=i;

                else if(s[i]==')') b[2]=i;

                else if(s[i]==']') b[3]=i;

            }

            t=1;

            while(t<=3)

            {

                for(int j=a[t]+1; j<b[t]; j++)

                {

                    if(t==1&&(j==a[t]+1))

                    printf("%c",s[j]-32);

                    else printf("%c",s[j]);

                }

                if(t!=3) printf(" ");

                t++;

            }

            int cc;

            for(int j=m; j<k; j++)

            {

                if(s[j]=='{'||s[j]=='('||s[j]=='[')

                {

                    cc=j;

                    break;

                }

                else printf("%c",s[j]);

            }

            for(int i=cc; i<k; i++)

            {

                if(s[i]=='{') a[1]=i;

                else if(s[i]=='(') a[2]=i;

                else if(s[i]=='[') a[3]=i;

                else if(s[i]=='}') b[1]=i;

                else if(s[i]==')') b[2]=i;

                else if(s[i]==']') b[3]=i;

            }

            t=1;

            while(t<=3)

            {

                for(int j=a[t]+1; j<b[t]; j++)

                {

                    printf("%c",s[j]);

                }

                if(t!=3) printf(" ");

                t++;

            }

            printf("\n");

        }

    }

    return 0;

}
View Code

 

你可能感兴趣的:(this)