中级光能
作为一个热爱作死的蒟蒻,我来回答问题啦QWQ
对于运算符前置表达式,我们可以从后往前遍历。建立一个栈s,如果第i个元素是一个数则入栈;否则即为运算符,取出栈顶的两个元素并弹出,进行该运算符的运算并将结果放入栈中。
当遍历结束时,栈中只剩下一个元素,那么这个元素就是结果。
好了好了,说人话~~
样例:
* + 11.0 12.0 + 24.0 35.0
从后往前遍历:
(1) 35.0为一个数,入栈。s栈:35.0
(2) 24.0为一个数,入栈。s栈:24.0 35.0
(3) +为一个运算符,取出堆顶的两个元素,即24.0和35.0。随后弹出24.0和35.0,将24.0+35.0的结果存入栈中。s栈:59.0
(4) 12.0为一个数,入栈。s栈:12.0 59.0
(4) 11.0为一个数,入栈。s栈:11.0 12.0 59.0
(5) +为一个运算符,同(3),取出11.0和12.0并弹出,将11.0+12.0的结果23.0存入栈中。s栈:23.0 59.0
(6) *为一个运算符,同(5),取出23.0和59.0并弹出,将23.0*59.0的结果1357.0存入栈中。s栈:1357.0
循环结束,栈内仅有一个元素,保留一位小数输出。
输出结果:1357.0
贴出核心代码:
什么?你在问我stringstream是啥?就是那啥,嗯,我们老师说的。
string s;(把s看做一个有数字也有字符的字符串)
stringstream ss;
ss<<s;(我把这个叫做吸星大法)
int x;
ss>>x(吐出来一个数字)
char c;
ss>>c;(吐出来一个字符)
如果s是:"385*857+666",那么第一次ss>>x吐出来的就是385,第二次ss>>c吐出来的是*,第三次ss>>x吐出来的又变成了857……
以此类推。。。
我也讲不清楚,有兴趣的话可以点击这里!
看我写得这么长,采纳一下呗,谢谢!
新手光能
真的简单 就这就这就这 不会真的有人连这么简单的题都要问吧!
缪鲲鹏在2020-07-21 21:35:19追加了内容
开个玩笑而已 别误会了巨佬
缪鲲鹏在2020-07-21 21:35:46追加了内容
忘记加狗头了(doge)嘿嘿嘿