一、基本思路:
将输入的表达式转化成后缀表达式,然后对后缀表达式进行运算
二、将算式转化为后缀表达式:
1、从左向右读取输入的运算符
2、若为数字将数字写入字符串A中
3、若为运算符,与栈顶的运算符比较优先级
3-1、若栈为空或为‘(’则直接压入栈中
3-2、若优先级高直接压入到栈中
3-3、若优先级低或相等则将栈顶的元素弹出并放入到A中,再与新的栈顶元素比较
4、若为括号
4-1、若为(则将其直接要入到栈中
4-2、若为)则从栈顶开始弹出元素依次放入到A中直到遇到(并删除这对括号
5、重复上述步骤直到算式读完
注:因为遇到优先级相同或更高的运算符号时要将栈顶的运算符弹出并加入到字符串中,所以相邻的运算符的数量小于等于二,所以在3-3处最多只需判断两次即可。
三、运算
1、读取刚刚转化成后缀表达式的字符串A,从左向右读取
2、若为操作数,则将其压入到栈B中
3、若为运算符,则读取并弹出栈堆上的两个元素进行运算(先出的元素为第一个元素),将结果压入到栈中成为新的栈顶元素。
4、重复上述两个步骤直到A结束,结果为栈顶元素。
C++代码
Cal.h
#ifndef CAL_H_INCLUDED
#define CAL_H_INCLUDED
#include<stack>
#include <string>
#include<iostream>
using namespace std;
class Cal{
public :
string tran();//将输入的字符串转化成后缀表达式
double result();//运算函数
public :
Cal();
Cal(string a);
private:
string exp;
stack<char>