main.cpp 1.8 KB
Newer Older
东方怂天's avatar
东方怂天 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
#include "ExpressionCal.h"

/**
 * 我想说的:
 * 说实话,第一个思考题怎么做呢?如果是纯数字表达式的话,双目和三目运算符其实就失去了它的意义,因为实际上根本不会对常数进行操作
 * 但我还是要在这里提一下,就在刚刚洗澡的时候,我想到了几种方案,下面我会一一说出:
 * 1、创建一个状态机,其实就是一个Flag标志,当我们遇到双目和三目运算符的话,Flag为true,然后将会在下次循环进行操作,但这个也带来一个问题,实际上这个只能针对双目的前自增和前自减。
 * 2、那么第二点,我认为还可以在数组栈或者操作符栈(个人认为是数组栈好一点)额外维护两个函数指针,一个是之前执行,一个之后执行,但实际上这浪费了大量的空间,所以不值得提倡,而且对于三目运算符其实也未必能够很好地解决。
 * 3、这个是我个人认为最好的一点,虽然说读取字符串没有栈来的快,但是我认为在这种情况下可以二者结合,先读取字符串,找到双目和三目运算符,先把各个变量计算出来,然后进行字符串替换。
 * 以我目前的水平我的确只能想到这些,但我想,聊胜于无。
 * 其实单目我可以写的,但是计算机里面其实单目只有在头部或者括号里才有效,所以只需要判断插入时栈内是否优先级小于等于1即可,所以我有点懒不想写了
 * 其实我认为把#换成(和)可以达成一样的效果,甚至来说,这个也符合计算表达式的原理,而且更容易理解一些,处理起来也没有什么差别。
 * 如果有那里错误了,还请老师指正。
*/

东方怂天's avatar
东方怂天 已提交
16 17
//3/0

东方怂天's avatar
东方怂天 已提交
18 19 20
int main()
{
    //CalExpression("((0x17*0.0023e3)/23-1.8)^2+1");
东方怂天's avatar
东方怂天 已提交
21 22 23
    string s;
    cin >> s;
    CalExpression(s);
东方怂天's avatar
东方怂天 已提交
24 25
    return 0;
}