vlad7576

up09-2 (DFA)

May 17th, 2020
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.86 KB | None | 0 0
  1. #include <iostream>
  2. #include <string>
  3.  
  4. bool is_word(const std::string &s)
  5. {
  6.     if (s.empty()) {
  7.         return false;
  8.     }
  9.     enum state
  10.     {
  11.         H, A, B, C, D, E, F, G, I, S, Err
  12.     };
  13.     state curr_st = H;
  14.  
  15.     size_t i = 0;
  16.     char c = s[i];
  17.     while (curr_st != S && curr_st != Err && i <= s.size()) {
  18.         if (i == s.size()) {
  19.             c = 'S';
  20.         }
  21.         switch (curr_st) {
  22.             case H: {
  23.                 if (c == '0') {
  24.                     c = s[++i];
  25.                     curr_st = A;
  26.                 } else if (c == '1') {
  27.                     c = s[++i];
  28.                     curr_st = B;
  29.                 } else {
  30.                     curr_st = Err;
  31.                 }
  32.                 break;
  33.             }
  34.             case A:
  35.                 if (c == '0') {
  36.                     c = s[++i];
  37.                     curr_st = A;
  38.                 } else if (c == '1') {
  39.                     c = s[++i];
  40.                     curr_st = B;
  41.                 } else {
  42.                     curr_st = Err;
  43.                 }
  44.                 break;
  45.             case B:
  46.                 if (c == '0') {
  47.                     c = s[++i];
  48.                     curr_st = C;
  49.                 } else if (c == '1') {
  50.                     c = s[++i];
  51.                     curr_st = D;
  52.                 } else {
  53.                     curr_st = Err;
  54.                 }
  55.                 break;
  56.             case C:
  57.                 if (c == '0') {
  58.                     c = s[++i];
  59.                     curr_st = E;
  60.                 } else if (c == '1') {
  61.                     c = s[++i];
  62.                     curr_st = F;
  63.                 } else {
  64.                     curr_st = Err;
  65.                 }
  66.                 break;
  67.             case D:
  68.                 if (c == '0') {
  69.                     c = s[++i];
  70.                     curr_st = G;
  71.                 } else if (c == '1') {
  72.                     c = s[++i];
  73.                     curr_st = I;
  74.                 } else {
  75.                     curr_st = Err;
  76.                 }
  77.                 break;
  78.             case E:
  79.                 if (c == '0') {
  80.                     c = s[++i];
  81.                     curr_st = A;
  82.                 } else if (c == '1') {
  83.                     c = s[++i];
  84.                     curr_st = B;
  85.                 } else if (c == 'S') {
  86.                     curr_st = S;
  87.                 } else {
  88.                     curr_st = Err;
  89.                 }
  90.                 break;
  91.             case F:
  92.                 if (c == '0') {
  93.                     c = s[++i];
  94.                     curr_st = C;
  95.                 } else if (c == '1') {
  96.                     c = s[++i];
  97.                     curr_st = D;
  98.                 } else if (c == 'S') {
  99.                     curr_st = S;
  100.                 } else {
  101.                     curr_st = Err;
  102.                 }
  103.                 break;
  104.             case G:
  105.                 if (c == '0') {
  106.                     c = s[++i];
  107.                     curr_st = E;
  108.                 } else if (c == '1') {
  109.                     c = s[++i];
  110.                     curr_st = F;
  111.                 } else if (c == 'S') {
  112.                     curr_st = S;
  113.                 } else {
  114.                     curr_st = Err;
  115.                 }
  116.                 break;
  117.             case I:
  118.                 if (c == '0') {
  119.                     c = s[++i];
  120.                     curr_st = G;
  121.                 } else if (c == '1') {
  122.                     c = s[++i];
  123.                     curr_st = I;
  124.                 } else if (c == 'S') {
  125.                     curr_st = S;
  126.                 } else {
  127.                     curr_st = Err;
  128.                 }
  129.                 break;
  130.             default:
  131.                 break;
  132.         }
  133.     }
  134.     return curr_st != Err;
  135. }
  136.  
  137. int main()
  138. {
  139.     std::string s;
  140.     while (std::cin >> s) {
  141.         std::cout << is_word(s) << std::endl;
  142.     }
  143. }
Advertisement
Add Comment
Please, Sign In to add comment