有一个字符型的表达式(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,有代码做好,如果没有代码的话,告诉我一个比较完备的算法也可以,不胜感激
展开
展开全部
设置两个栈,一个数据栈,一个运算符栈,由左边读取,
第一个"("写入运算符栈
第二个a写入数据栈
第三个“+”写入一个运算符栈
第四个b 查看下一位不是* / 而且运算符栈第一位是+号那么就 “a” “+” 出栈,计算出结果(假设为A)来后放回数据栈
第五个“)”出栈"(", ”A“ 与”)“计算后A继续放回数据栈。。。。
一时讲不清,自己看书吧
第一个"("写入运算符栈
第二个a写入数据栈
第三个“+”写入一个运算符栈
第四个b 查看下一位不是* / 而且运算符栈第一位是+号那么就 “a” “+” 出栈,计算出结果(假设为A)来后放回数据栈
第五个“)”出栈"(", ”A“ 与”)“计算后A继续放回数据栈。。。。
一时讲不清,自己看书吧
追问
您说的算法我知道,是计算算数表达式的一种常用方法,但是只能解决由数字和运算符组成的表达式,我这里想问的是一种纯字符表示的表达式的形式,像您说的那样的算法,第一个括号里面的元素计算之后形式是不变的,无法得到我想要的括号展开的结果
追答
如果只是这么一个等式的话,或者相差不多的话还容易点,建立类,一个括号创建一个对象,用上对象数组啦什么的,应该能实现,如果复杂了的话,就找学数学的同学,帮算法设计吧,毕竟算法设计师都大多搞数学的。
展开全部
以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为字符
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
没太明白你的想法.... 我按我的想法说说:
比如(1 - 2)*(3 + 4)展开不就是3 + 4 - 6 - 8 吗,每个数能确定,每个符号也能确定,还需要算法吗? 换成字符不也是一样吗。就是第几个和第几个的问题。
比如(1 - 2)*(3 + 4)展开不就是3 + 4 - 6 - 8 吗,每个数能确定,每个符号也能确定,还需要算法吗? 换成字符不也是一样吗。就是第几个和第几个的问题。
追问
我就是想展开,主要就是在展开的这个过程,请问如何展开?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询