题目很简单,做得很失败。
就因为少了一个判断,犯下了致命的错误。
len=strlen(a);
for(i=0,k=0;i<len;i++) //去空格
if(a[i]!=' ')
b[k++]=a[i];
b[k]='/0';
len=strlen(b);
for(i=1;i<len-1;i++) //去 类似(((A))),的“()”
if(b[i]>='A'&&b[i]<='Z'&&b[i-1]=='('&&b[i+1]==')')
{
for(i,k=1;(i-k)>=0&&(i+k)<=(len-1);k++)
if(b[i-k]=='('&&b[i+k]==')')
{
b[i-k]=' ';
b[i+k]=' ';
}
else if(b[i-k]!='('||b[i+k]!=')') /*这个判断很重要,就因为少了这个判断,导致((-(A+(A)))))
break; 的解为-A+A;正解为-(A+A)
}
for(i=0,k=0;i<len;i++)//再去空格
if(b[i]!=' ')
a[k++]=b[i];
a[k]='/0';
len=strlen(a);
for(i=0;i<len-1;i++) //去剩下的配对括号
if(a[i]=='(')
if(i==0||a[i-1]!='-') //原则:第一个为“(”或非“-”后面的“(”
{
a[i]=' ';
tt=1;
for(k=i+1;k<len;k++)
{
if(a[k]=='(')
tt++;
else if(a[k]==')')
tt--;
if(tt==0)
{
a[k]=' ';
break;
}
}
}