HDU——1237简单计算器

来源:互联网 发布:宏程序编程实例自学 编辑:程序博客网 时间:2024/05/21 08:04

HDU——1237简单计算器
分析:模拟题,现将一行的字符读入,当遇见数字就放入数子栈,遇见加减放入字符栈,
遇见乘除,将最顶端的数字串和下一个数字进行计算再放入数字栈 _最后将栈里面的元素倒置,进行加减运算,emmm估计队列也可以用的
用stack和对字符串的处理
给的数据也好,每个数字和字符中间都是用空格分开,好判断emmm~

#include<iostream>#include<cstdio>#include<stack>#include<map>#include<string>#include<cstring>using namespace std;int main(){    char s[220];    while(gets(s),strcmp(s,"0"))    /*为0结束 ,gets函数可以无限读取以回车为结束  同时strcmp比较两个字符串     若str1==str2,则返回零; 若str1<str2,则返回负数; 若str1>str2,    则返回正数。*/     {        int len=strlen(s);        stack<char>sym;         stack<double>num;        for(int i=0;i<len;i++)        {            if(s[i]==' ')                continue;            else if(s[i]=='*'||s[i]=='/')            {                double x=num.top();                num.pop();                double y=0;                int j;                for(j=i+2;j<len;j++)//此处注意要跳过几个非数字符号                 {                    if(s[j]!=' ')                    y=y*10+s[j]-'0';                    else                     break;                }                if(s[i]=='*')                 num.push(x*y);                else                  num.push(x/y);                i=j;            }//对于乘除直接计算             else if(s[i]=='+'||s[i]=='-')                sym.push(s[i]);            else            {                double ans=0;                int j;                for(j=i;j<len;j++)                {                    if(s[j]!=' ')                    ans=ans*10+s[j]-'0';                    else                     break;                }                i=j;                num.push(ans);              }        }        //倒序        stack<char>dsym;         stack<double>dnum;        while(!sym.empty())        {            char e=sym.top();            //cout<<e<<endl;            dsym.push(e);            sym.pop();        }        while(!num.empty())        {            double e=num.top();            //cout<<e<<endl;            dnum.push(e);            num.pop();        }        //进行加减计算         while(!dnum.empty()&&!dsym.empty())        {            double x=dnum.top();            dnum.pop();            double y=dnum.top();            dnum.pop();            char e=dsym.top();            dsym.pop();            if(e=='+')              dnum.push(x+y);            else              dnum.push(x-y);           }        printf("%.2lf\n",dnum.top());    }    return 0;}
原创粉丝点击