首页 > 代码库 > 各种括号题

各种括号题

括号题的话用字符窜流比较好写,因为不用每次重新定位。

1 实现计算器,包括+/- 负号,括号的计算 例如"(1+(4+5+2)-3)+(6+8)" = 23

// recursive way#include <iostream>#include <sstream>#include <string>using namespace std;int calculate(stringstream& ss) {    int res = 0, sign = 1;    while(ss) {        if(isdigit(ss.peek())) {            int val;            ss >> val;            res += sign * val;            continue;        }        char ch;        ss >> ch;        if(ch == ‘)‘) {            return res;        }        if(ch == ‘(‘) {            res += sign * calculate(ss);        }        if(ch == ‘-‘) {            sign = -1;        }        if(ch == ‘+‘) {            sign = 1;        }    }    return res;} int calculate(string&& s) {    stringstream ss;    ss << std::noskipws << s;    return calculate(ss);}int main(){  cout << calculate("0") << endl;}

 1 实现计算器,包括+ - * / 负号,括号的计算 例如"(1+(4+5+2)-3)+(6+8)" = 23

// Example program#include <iostream>#include <sstream>#include <string>using namespace std;int calculate(stringstream& ss) {    int res = 0, left = 0;    char ch = ‘+‘;    while(ss) {        int right = 0;        ss >> std::ws;          if(isdigit(ss.peek()) || ss.peek() == ‘(‘) {            if(ss.peek() == ‘(‘) {                ss.get();//ignore ‘(‘                right = calculate(ss);            }else {                          ss >> right;            }            if(ch == ‘+‘ || ch == ‘-‘) {                res += left;                left = (ch == ‘+‘)? right : -right;            }else {                left = ((ch == ‘*‘) ? left * right : left / right);             }            continue;        }        ss >> ch;        if(ch == ‘)‘) {            return res + left;        }    }    return res + left;} int calculate(string&& s) {    stringstream ss;    ss << s;    return calculate(ss);}int main(){  cout << calculate("1+(9+8)*(7+8*3+(9+8)*6)+(8-7)*5+6") << endl;}

 

各种括号题