首页 > 代码库 > 各种括号题
各种括号题
括号题的话用字符窜流比较好写,因为不用每次重新定位。
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;}
各种括号题
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。