您的位置:首页 > 其它

ZOJ 1423 (Your)((Term)((Project))) (POJ 1690)

2011-04-07 20:59 169 查看
额,这个题就是一括号匹配,把多余括号去掉!

因为这些括号已经是匹配好的了,所以,当我们遇到一个)时,那么向前查找的第一个( 一定是它的匹配,这样判断是否去掉就OK了!

#include<stdio.h>
#include<string.h>
#define N 260
char str
,s
;
int sign
;
int main()
{
int i,j,m,len,k;
scanf("%d",&m);
getchar();
while(m--)
{
gets(s);
len=0;
for(i=0;s[i];i++)
if(s[i]!=' ')str[len++]=s[i];
for(i=0;i<len;i++)
{
if(str[i]==')')
{
for(j=i-1;j>=1;j--)
{
if(str[j]=='('&&str[j-1]!='-'&&sign[j]==0)
{
sign[i]=sign[j]=1;
break;
}
else if(str[j]=='('&&str[j-1]=='-'&&sign[j]==0)
{
for(k=j+1;k<i;k++)
if(str[k]=='+'||str[k]=='-')break;
if(k==i)
{
sign[i]=sign[j]=1;
break;
}
else
{
sign[i]=sign[j]=2;
break;
}
}
else if(sign[j]==0&&sign[i]==0&&str[j]=='(')
{
sign[j]=sign[i]=2;
break;
}
}
if(j==0)
{
if(str[0]=='('&&sign[0]==0)
sign[0]=sign[i]=1;
}
}
}
for(i=0;i<len;i++)
if(sign[i]!=1)printf("%c",str[i]);
puts("");
for(i=0;i<len;i++)
sign[i]=0;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c