C++11状态机模式展示

2021-07-18  本文已影响0人  FredricZhu

题目,


image.png

这个题目其实就是各种状态之间的转换,写的更好的话,可能还需要一个状态机变量。
这里直接就是在一个函数里面进行转换了。
代码比较简单,
代码如下,

#include <iostream>
#include <vector>
#include <string>
#include <sstream>
using namespace std;

class CombinationLock
{
    size_t current_idx {0};
    vector<int> combination;
public:
    string status;

    CombinationLock(const vector<int> &combination) : combination(combination), status{"LOCKED"} {
      
    }

    void enter_digit(int digit)
    {
       if(status.compare("LOCKED") == 0) {
          status = "";
      }
      
      if(current_idx >= combination.size()) {
          status = "ERROR";
          return;
      }
      
      if(status == "ERROR") {
          return;
      }
      
      if(combination[current_idx] == digit) {
        ostringstream oss;  
        oss << digit;
        status += oss.str();
      }else {
          status = "ERROR";
          return;
      }

      if(current_idx == combination.size()-1) {
          status = "OPEN";
      }
      ++current_idx;
      
    }
};
上一篇 下一篇

猜你喜欢

热点阅读