您的位置:首页 > 其它

URAL 1993 This cheeseburger you don't need

2013-11-30 20:22 381 查看
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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: