首页 > 代码库 > Basic Calculator
Basic Calculator
该题的思路非常明白就是将中缀表达式转换为后缀表达式。然后通过后缀表达式来求值。
class Solution { public: int calculate(string s) { vector<string> postorder; stack<char> ccache; stack<int> icache; string tmp; int len = s.length(); if(s.length() < 1) return 0; //构造后缀表达式 for(int i = 0; i < len; ){ if(s[i] == ‘ ‘){ i++; continue; } if(s[i] == ‘+‘ || s[i] == ‘-‘ || s[i] == ‘(‘ || s[i] == ‘)‘){ if(s[i] == ‘(‘ || ccache.empty()){ ccache.push(s[i]); i++; continue; } if(s[i] == ‘)‘){ while(ccache.top() != ‘(‘){ tmp = ""; tmp += ccache.top(); postorder.push_back(tmp); ccache.pop(); } ccache.pop(); i++; continue; } if(s[i] == ‘+‘ || s[i] == ‘-‘){ while(!ccache.empty() && ccache.top() != ‘(‘ ){ tmp = ""; tmp += ccache.top(); postorder.push_back(tmp); ccache.pop(); } ccache.push(s[i]); i++; continue; } }else{ int j = i; while(j < len && s[j] >= ‘0‘ && s[j] <= ‘9‘) j++; tmp = ""; tmp = s.substr(i, j - i); postorder.push_back(tmp); i = j; } } //将栈中剩余的元素所有加入到后缀表达式字串中 while(!ccache.empty()){ tmp = ""; tmp += ccache.top(); ccache.pop(); postorder.push_back(tmp); }
//通过后缀表达式求值 int fir, sec; for(int i = 0; i < postorder.size(); i++){ if(postorder[i] == "+" || postorder[i] == "-"){ sec = icache.top(); icache.pop(); fir = icache.top(); icache.pop(); if(postorder[i] == "+") icache.push(fir + sec); if(postorder[i] == "-") icache.push(fir - sec); }else{ icache.push(atoi(postorder[i].c_str())); } } return icache.top(); } }
Basic Calculator
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。