c语言删除最外层括号,C语言删除多余的括号

匿名用户

1级

2009-04-16 回答

C语言删除多余的括号

悬赏分:20 - 离问题结束还有 16 天 21 小时

输入一串算式(只有加减法),仅仅要求删去其中多余的括号再输出,计算或合并同类项之类的事情不必考虑。

例如

输入

(a-b+c)-(a+(b-c))-(c-(d-e))↵

输出

a-b+c-(a+b-c)-(c-(d-e))↵

要在TC2.0下试验准确的程序!

问题补充:这个程序还是有缺陷的,比如输入(((a)+b))的时候结果就不对!

的确还是有些漏洞,比如a-((((b))))结果还是不对!

提问者: 匿名

我来回答:

回答即可得2分,回答被采纳则获得悬赏分以及奖励20分

如果需要图片来说明回答内容,可以上传图片

参考资料:

匿名回答 积分规则

回答 共 1 条

#include"stdio.h"

void main()

{char a[100]={0};

int i,j,z,m=0,n=0,k=0,b[100]={0};

gets(a);

if(a[0]=='(')

{j=1;

b[0]=1;

for(;a[j]=='(';k++,j++) b[j]=1;

if(a[j]=='+'||a[j]=='-') goto next1;

z=1;

while(n!=m+k+1)

{if(a[j]=='(') m++;

if(a[j]==')')

{

n++;

if(n==m+z)

b[j]=1,z++;

}

j++;

}

}

i=0;

next1: for(;a[i];i++)

{

if(a[i]=='+'&&a[i+1]=='(')

{j=i+2;

b[i+1]=1;

for(k=0;a[j]=='(';k++,j++) b[j]=1;

if(a[j]=='+'||a[j]=='-') {i=j;for(;k+1>0;k--) b[j-k-1]=0;goto next1;}

m=0;n=0;

z=1;

while(n!=m+k+1)

{if(a[j]=='(') m++;

if(a[j]==')')

{

n++;

if(n==m+z)

b[j]=1,z++;

}

j++;

}

}

}

for(i=0;a[i];i++)

if(a[i]=='-'&&a[i+1]=='(')

{

for(k=0;a[i+2]=='(';i++,k++);

if(a[i+3]==')')

{for(j=1;j

{b[i+2-j]=1;b[i+2+j]=1;}

}

}

for(i=0;a[i];i++)

if(b[i]==0)

printf("%c",a[i]);

}

全自己编的哦,TC2.0里运行过,是对的,有什么不懂再问我。

改了,去掉了你说的漏洞,但a+(-b+c)的情况没写进去,其余问题目前还没发现。

又改了,去掉了a+(-b+c)的漏洞。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值