实现简单带+、-、*、/、%、()的计算器

来源:互联网 发布:非洲网络 编辑:程序博客网 时间:2024/05/16 12:15
#include<iostream>#include<vector>#include<string>#include<stack>using namespace std;int chartoint(char a){    switch(a)    {        case '+':        case '-':return 0;        case '*':        case '/':        case '%':return 1;        case '(':return 2;        case ')':return 3;        default:return 4;    }}//acb(其中c为运算符,如2+3)int biaodashi(int a,int b,char c){    switch(c)    {        case '+':return a+b;        case '-':return a-b;        case '*':return a*b;        case '/':return a/b;        case '%':return a%b;;    }}//中缀表达式转为后缀表达式void MiddletoBack(string &input,vector<char>&output){    if(input=="")        return;    stack<char> a;    int len=input.size();    for(int i=0;i<len;i++)    {        int cur=chartoint(input[i]);        if(cur==4)            output.push_back(input[i]);        else        {            int flag=0;            while(a.size()!=0)            {                int front=chartoint(a.top());                if(cur==3)                    {                        while(front!=2)                        {                            output.push_back(a.top());                            a.pop();                            front=chartoint(a.top());                        }                }                if(front==2)                {                    flag=1;                    if(cur==3)                        {                            a.pop();                            break;                    }                    else{                        a.push(input[i]);                        break;                    }                }                else                    if(front>=cur)                        {                            output.push_back(a.top());                            a.pop();                    }                    else                        break;            }            if(flag==0)                a.push(input[i]);        }    }    while(a.size()!=0)        {            output.push_back(a.top());            a.pop();        }}//计算后缀表达式int calcu(vector<char>&output){    int len=output.size();    stack<int>result;    for(int i=0;i<len;i++)    {        int temp=chartoint(output[i]);        if(temp==4)            result.push(output[i]-'0');        else        {            int b=result.top();            result.pop();            int a=result.top();            result.pop();            int c=biaodashi(a,b,output[i]);            result.push(c);        }    }    return result.top();}int main(){//Gray(3);    vector<string> result;    string input="1+2*3-5%1*6";    vector<char>output;    MiddletoBack(input,output);    int c=biaodashi(2,3,input[1]);    int len=output.size();    for(int i=0;i<len;i++)        cout<<output[i]<<endl;    cout<<calcu(output); return 0;}
0 0