有一个字符型的表达式(a+b)*(c+d),要求展开得到a*c+a*d+b*c+b*d,请问用C++该如何处理 15

如上面所示,输入(a+b)*(c+d),输出a*c+a*d+b*c+b*d,有代码做好,如果没有代码的话,告诉我一个比较完备的算法也可以,不胜感激... 如上面所示,输入(a+b)*(c+d),输出a*c+a*d+b*c+b*d,有代码做好,如果没有代码的话,告诉我一个比较完备的算法也可以,不胜感激 展开
 我来答
nc041001
2011-03-13 · TA获得超过399个赞
知道小有建树答主
回答量:513
采纳率:0%
帮助的人:167万
展开全部
设置两个栈,一个数据栈,一个运算符栈,由左边读取,
第一个"("写入运算符栈
第二个a写入数据栈
第三个“+”写入一个运算符栈
第四个b 查看下一位不是* / 而且运算符栈第一位是+号那么就 “a” “+” 出栈,计算出结果(假设为A)来后放回数据栈
第五个“)”出栈"(", ”A“ 与”)“计算后A继续放回数据栈。。。。
一时讲不清,自己看书吧
追问
您说的算法我知道,是计算算数表达式的一种常用方法,但是只能解决由数字和运算符组成的表达式,我这里想问的是一种纯字符表示的表达式的形式,像您说的那样的算法,第一个括号里面的元素计算之后形式是不变的,无法得到我想要的括号展开的结果
追答
如果只是这么一个等式的话,或者相差不多的话还容易点,建立类,一个括号创建一个对象,用上对象数组啦什么的,应该能实现,如果复杂了的话,就找学数学的同学,帮算法设计吧,毕竟算法设计师都大多搞数学的。
听见老俊说
2011-03-12
知道答主
回答量:37
采纳率:0%
帮助的人:28.1万
展开全部
以string(或char[])保存输入的表达式,然后用isnum()(判断字符是否为0-9)获取a,b,c,d的值(可用+ -号做间隔),分别存取到一个整型数组a[4]中(需要itoa()函数的调用,也可以使用强制类型转换如int(a),如果abcd不大的话),然后x=a[1]+a[2],y=a[3]+a[4],最后打印字符a[0]*a[2]+……+a[1]*a[3];输出结果为x*y。(该算法比较简单,没有检查输入格式的正确性,你可以自己进行设置)
更多追问追答
追问
这里是纯字符操作,不涉及数字,我里面写的abcd不是数字,就是字符
追答
所以我说了要使用atoi()这个函数了(上面写成itoa()~),它可以将字符转化为数字,即atoi(ch),ch为字符
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
hemiao1
2011-03-14 · TA获得超过172个赞
知道答主
回答量:56
采纳率:0%
帮助的人:44.8万
展开全部
没太明白你的想法.... 我按我的想法说说:
比如(1 - 2)*(3 + 4)展开不就是3 + 4 - 6 - 8 吗,每个数能确定,每个符号也能确定,还需要算法吗? 换成字符不也是一样吗。就是第几个和第几个的问题。
追问
我就是想展开,主要就是在展开的这个过程,请问如何展开?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式