简单表达式求值的C++代码(10以内不包含括号的加减乘除)

#include <iostream>
#include <stack>
#include <string>

using namespace std;

bool Priority(char fir,char sec)//比较两个运算符的优先级
{
    if((fir=='+'||fir=='-')&&(sec=='*'||sec=='/'))
        return true;
    else
        return false;
}

bool IsDigit(char data)//判断是否为数字
{
    if(data>='0'&&data<='9')
        return true;
    else
        return false;
}

bool IsSingn(char data)//判断是否为运算符
{
    if(data=='+'||data=='-'||data=='*'||data=='/')
        return true;
    else
        return false;
}

int Compute(int data1,char sign,int data2)//计算data1和data2的sign运算
{
    if(sign=='+')
        return data1+data2;
    else if(sign=='-')
        return data1-data2;
    else if(sign=='*')
        return data1*data2;
    else if(sign=='/')
        return data1/data2;
    else
    {
        cout<<"you have an error sign!"<<endl;
        return 0;
    }
}

int Calculate(char source[],int n)//计算器主函数
{
    int i,intData;
    stack<int> digitStack;
    stack<char> signStack;
    
    for(i=0;i<n;i++)
    {
        if(IsDigit(source[i]))//数字直接放入数字栈
        {
            char str[5];
            str[0]=source[i];
            digitStack.push(atoi(str));
        }
        else if(IsSingn(source[i]))
        {
            if(signStack.empty())//符号栈空,也就是第一个运算符或者前边都计算完毕只剩最后一个运算符,直接入栈
                signStack.push(source[i]);

            else//和栈顶的符号比较,如果栈顶的符号优先级高,则用数字栈顶的两个数和符号栈顶的符号运算,

                 //并将这个个元素出栈,将结果入符号栈,i--,将当前符号和现在新的符号栈顶的符号比较优先级

            {
                char tmpSign=signStack.top();
                if(Priority(tmpSign,source[i]))
                {
                    signStack.push(source[i]);
                }
                else
                {
                    int tmpDigit1=digitStack.top();
                    digitStack.pop();
                    int tmpDigit2=digitStack.top();
                    digitStack.pop();
                    int computeResult=Compute(tmpDigit2,tmpSign,tmpDigit1);
                    signStack.pop();
                    digitStack.push(computeResult);
                    i--;
                }
            }
        }
        else
        {
            cout<<"you have input an error string"<<endl;
            return 0;
        }

    }

//最后符号栈剩余一个符号,数字栈只剩下两个数字,计算之

    int tmpDigit1=digitStack.top();
        digitStack.pop();
        int tmpDigit2=digitStack.top();
        digitStack.pop();
    char tmpSign=signStack.top();
    signStack.pop();
        int computeResult=Compute(tmpDigit2,tmpSign,tmpDigit1);
    return computeResult;

}

int main()
{
    char str[20];
    int i=0;
    do
    {
        cin>>str[i];
        i++;
    }
    while(str[i-1]!='@');//字符串以@结尾
        
    cout<<Calculate(str,i-1)<<endl;
    return 1;
}

你可能感兴趣的:(简单表达式求值的C++代码(10以内不包含括号的加减乘除))