Basic Calculator II

来源:互联网 发布:java final 对象 编辑:程序博客网 时间:2024/06/05 19:50

Implement a basic calculator to evaluate a simple expression string.

The expression string contains only non-negative integers, +-*/ operators and empty spaces . The integer division should truncate toward zero.

You may assume that the given expression is always valid.

Some examples:

"3+2*2" = 7" 3/2 " = 1" 3+5 / 2 " = 5

别人优秀的代码:

1.这个代码简洁,其中44 - op 代表 op == '+' ? 1 : -1。

同时,>>能跳过空格

int calculate(string s) {    istringstream in('+' + s + '+');    long long total = 0, term = 0, n;    char op;    while (in >> op) {        if (op == '+' or op == '-') {            total += term;            in >> term;            term *= 44 - op;        } else {            in >> n;            if (op == '*')                term *= n;            else                term /= n;        }    }    return total;}

2.容易理解,也是很通用的好方法。也是别人优秀的代码
int calculate(string s) {        int result = 0, cur_res = 0;        char op = '+';        for(int pos = s.find_first_not_of(' '); pos < s.size(); pos = s.find_first_not_of(' ', pos)) {            if(isdigit(s[pos])) {                int tmp = s[pos] - '0';                while(++pos < s.size() && isdigit(s[pos]))                    tmp = tmp*10 + (s[pos] - '0');                switch(op) {                    case '+' : cur_res += tmp; break;                    case '-' : cur_res -= tmp; break;                    case '*' : cur_res *= tmp; break;                    case '/' : cur_res /= tmp; break;                }            }            else {                if(s[pos] == '+' || s[pos] == '-') {                    result += cur_res;                    cur_res = 0;                }                op = s[pos++];            }        }        return result + cur_res;    }

3.这个用栈的也是很简单的方法

int calculate(string s) {    stack<int> myStack;    char sign = '+';    int res = 0, tmp = 0;    for (unsigned int i = 0; i < s.size(); i++) {        if (isdigit(s[i]))            tmp = 10*tmp + s[i]-'0';        if (!isdigit(s[i]) && !isspace(s[i]) || i == s.size()-1) {            if (sign == '-')                myStack.push(-tmp);            else if (sign == '+')                myStack.push(tmp);            else {                int num;                if (sign == '*' )                    num = myStack.top()*tmp;                else                    num = myStack.top()/tmp;                myStack.pop();                myStack.push(num);            }             sign = s[i];            tmp = 0;        }    }    while (!myStack.empty()) {        res += myStack.top();        myStack.pop();    }    return res;}




0 0
原创粉丝点击