码迷,mamicode.com
首页 > 其他好文 > 详细

计算器代码

时间:2018-10-13 18:15:52      阅读:132      评论:0      收藏:0      [点我收藏+]

标签:temp   std   sizeof   include   amp   char   size   代码   code   

#include <iostream>
#include <cstdio>
#include <stack>
#include <cstring>

using namespace std;

int r(char c)
{
    switch(c)
    {
        case #: return 0;
        case (: return 0;
        case +: return 1;
        case -: return 1;
        case *: return 2;
        case /: return 2;
        case ): return 3;
        default: return -1;
    }
}
int cal(int a, int b, char c)      //运算
{
    switch(c)
    {
        case +: return a+b;
        case -: return a-b;
        case *: return a*b;
        case /: return a/b;
        default: return -1;
    }
}

int main()
{
    char s[210];
    int i;
    while(cin.getline(s, sizeof(s)))
    {
        if(strcmp(s, "0") == 0) return 0;
        int len = strlen(s);
        s[len++] =  ;
        s[len++] = #;
        s[len] = /0;
        stack<char> f;
        stack<int> dit;
        f.push(#);
        for(i = 0; i < len; i++)
        {
            if(s[i] ==  ) continue;
            if(isdigit(s[i]))
            {
                int temp;
                sscanf(s+i, "%d", &temp);
                dit.push(temp);
                while(isdigit(s[i+1])) i++;
            }
            else
            {
                bool ok = 1;
                while(ok)
                {
                    if(r(s[i]) > r(f.top()) && s[i] != ) || s[i] == ()
                    {
                        f.push(s[i]);
                        ok = 0;
                    }
                    else
                    {
                        if(s[i] == # && f.top() == #) break;
                        if(s[i] == )){
                        while(f.top() != (){
                        int b = dit.top(); dit.pop();
                        int a = dit.top(); dit.pop();
                        char c = f.top(); f.pop();
                        int d = cal(a, b, c);
                        dit.push(d);
                        }
                        f.pop();
                        ok = 0;
                        }
                        else{
                        if(f.top() == () {
                            ok = 0;
                        }
                        int b = dit.top(); dit.pop();
                        int a = dit.top(); dit.pop();
                        char c = f.top(); f.pop();
                        int d = cal(a, b, c);
                        dit.push(d);
                        }
                        if(s[i] == # && f.top() == #) break;
                }
                }
            }
        }
        int ret = dit.top();
        printf("%d\n", ret);
        while(!f.empty()) f.pop();
        while(!dit.empty()) dit.pop();
    }
    return 0;
}

 

计算器代码

标签:temp   std   sizeof   include   amp   char   size   代码   code   

原文地址:https://www.cnblogs.com/downrainsun/p/9783453.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!