中缀表达式转后缀,后缀表达式计算

时隔一年多,我又重新写了一遍中缀表达式和后缀表达式,之前的2篇文章是2017年10月31号的,中缀表达式转后缀表达式,后缀表达式时间过的真快啊,要继续努力,不负好时光。

之前思路是对的,但我是一个一个字符char处理,只能处理1位数的加减乘除啊,显然不行,还要处理小数。因为我在学习Qt,写了一个正常功能的计算器Qt5 计算器的实现,所以重新写了。

#include
using namespace std;
int instack(string c)//堆栈内部的运算符优先级
{
	int priority;
	if(c=="(")
        priority=0;
    if(c=="+"||c=="-")
        priority=1;
    if(c=="*"||c=="/")
        priority=2;
    if(c=="#")
        priority=0;
	return priority;
}
int outstack(string c)//堆栈外的运算符优先级
{
	int priority;
	if(c=="(")
        priority=3;
    if(c=="+"||c=="-")
        priority=1;
    if(c=="*"||c=="/")
        priority=2;
	return priority;
}
vector InfixToPostfix(string str)
{
    vector exp,res;
    string tstr="";
    for(int i=0;i stk;//存放 运算符和括号的栈
    stk.push("#");
    //string test="#";
    string st="";
    //cout<=outstack(st))
            {
                res.push_back(stk.top());
                stk.pop();
            }
            stk.push(st);
        }
        else
        {
            res.push_back(st);
        }
    }
    while(!stk.empty())
    {
        if(stk.top()!="#")
        {
            res.push_back(stk.top());
        }
        stk.pop();
    }
    return res;
}

bool operation(string tmp,stack &stk)
{
    double a=0,b=0;//操作数
    if(stk.size()<2)
    {
        cout<<"miss operator number"< exp)
{
    string tmp;//临时存放后缀表达式的每一项
    bool flag=true;
    stack stk;
    for(int i=0;i>str;
    vector res;
    res=InfixToPostfix(str);
    for(int i=0;i

程序运行结果:

中缀表达式转后缀,后缀表达式计算_第1张图片

你可能感兴趣的:(算法)