Advertisement
Guest User

Untitled

a guest
Aug 18th, 2019
102
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.19 KB | None | 0 0
  1. // 运算符:与、或、非
  2. // 值:真、假
  3.  
  4. class Solution {
  5. public:
  6. bool parseBoolExpr(string expression) {
  7. int s = 0; // 递归开始的位置
  8. return parseBoolExpr(expression, s);
  9. }
  10.  
  11. private:
  12. bool parseBoolExpr(string exp, int &s) {
  13. char ch = exp[s++]; // s++ 跳过当前字符
  14.  
  15. if(ch == 't') return true;
  16. if(ch == 'f') return false;
  17.  
  18. // 非运算
  19. if(ch == '!') {
  20. bool ans = !parseBoolExpr(exp, ++s); // 跳过左括号
  21. ++s; // 跳过右括号
  22. return ans;
  23. }
  24.  
  25. // 与运算 或运算
  26. bool isAnd = (ch == '&'); // 如果是与运算
  27. bool ans = isAnd;
  28. ++s; // 跳过运算符
  29. while(true) {
  30. if(isAnd) // 与运算
  31. ans &= parseBoolExpr(exp, s);
  32. else // 或运算
  33. ans |= parseBoolExpr(exp, s);
  34. if(exp[s++] == ')') // 如果是右括号,退出
  35. break;
  36. // 如果是逗号,继续处理
  37. }
  38. return ans;
  39. }
  40. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement