之前写过这方面的算法,用的思想是先将中缀表达式转化为后缀表达式,再计算。本文采用直接计算中缀表达式的方法,用两个栈分别保存,运算符和数值。另外在处理括号问题时,抛开之前增大优先级的繁琐方法,直接把括号当做一条新的式子,计算后返回一个值到原式,这也算是递归思想。最后,此次把数据域扩充到实数域。
瑕疵:代码没有考虑除以0和一些不符合的情况,即输入的式子都是符合运算法则的。因为只是想体现算法的核心,没有必要搞得太繁琐,需要的时候再加就是了。
#include<iostream>
#include<stack>
#include<string>
using namespace std;
const int power[6]={2,1,0,1,0,2};//四则运算的优先级,分别对应*,+, ,-, ,/
double tqn(char s[],int &i)//提取数字
{
double result=0;
int j;
while(s[i]!='.'&&s[i]!='+'&&s[i]!='-'&&s[i]!='*'&&s[i]!='/'&&s[i]!='('&&s[i]!=')'&&s[i]!='\0')//整数部分
{
result=result*10+s[i]-'0';
i++;
}
if(