问题还是挺多:
(1)例如输入非运算符没有报错
(2)对于“(2)”这种无法运算
(3)暂时没有加入小数,基于整型运算
-----------------------------------------------------------------
(一)用栈实现四则运算
其实每次看到栈的章节的时候都会拿四则运算做例子,这个确实是个很具体的例子,其实递归也是一种栈的实现,不过是编译器帮我们做好了。
实现这个运算难度也不是很大,大家先别急着就要考虑(2+3*3)/(2^(2+1)-3) 这种蛋疼无比的计算,可先从简单的同类运算开始:
例如:2+3+4
我们计算的时候是这么进行
2先压入栈,然后压入+,再次压入3
这时候压入+号,我们知道这次的+号和上次+号是同个运算优先级,所以我们遵从左-》右的计算顺序,
弹出3、+、2 求出Calc(2,'+',3) 返回结果,压入栈5,以及这次+号,然后压入4 ,运行到结尾,再次出栈4,+,5
计算Calc(5,'+',4);返回9计算完毕
再如:2+3*4+3
同理压入2,+,3,
到达第二个符号的时候,是*号,优先级高于+号,所以继续压入,不弹出。
压入*,4
这时候用遇到+号这种运算符好,我们知道*号的优先级高,所以先计算3*4
然后压入结果栈成为:2+12
这时候判断之前的加号优先级和现在一样,继续出栈计算得栈:4
前面无符号来,加入这时候的+号和3 然后再弹出。。
其实只要遵循这种思路就能把四则运算模拟出来了,当然有人利用两个栈,一个盛放数字,一个是符号
个人比较喜欢直接一个栈
下面我贴出三个版本,就是按照这种由简单-->难,不断完善
版本一看了就好,后面就细节更改,无所谓,而且比较乱。。
//============================================================================
// Name : CalcSimu.cpp
// Author : YLF
// Version :
// Copyright : Your copyright notice
// Description : Hello World in C++, Ansi-style
//============================================================================
#include <iostream>
#include <vector>
#include <stdio.h>
using namespace std;
int CalcSimu(char *str);
int Calc(char num1,char opt,char num2);
int Level(char c);
int CalcSimu2(char *str);
int Calc2(int num1,int opt,int num2);
int Level2(char c);
int CalcSimu3(char *str);
int