标签:
括号题的话用字符窜流比较好写,因为不用每次重新定位。
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; }
标签:
原文地址:http://www.cnblogs.com/Jaunty/p/5905936.html