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

 

posted on 2013-11-30 20:22  枫、  阅读(249)  评论(0编辑  收藏  举报