Vanilla_Fury

yap_translators_1

Dec 14th, 2021
1,083
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.67 KB | None | 0 0
  1. #include <iostream>
  2.  
  3. enum typesOfChars {b_d, d_2_7, d_ACDEF, b_end_aka_B, h_end, o_end, d_89} tpOfCh;
  4.  
  5. const int tran[6][7] = {
  6.     {2, 3, 0, 0, 0, 0, 5},
  7.     {2, 3, 5, 4, 6, 6, 5},
  8.     {3, 3, 5, 5, 6, 6, 5},
  9.     {5, 5, 5, 5, 6, 0, 5},
  10.     {5, 5, 5, 5, 6, 0, 5},
  11.     {0, 0, 0, 0, 0, 0, 0}};
  12.  
  13. const bool isFinalState[] = {false, false, false, true, false, true};
  14.  
  15.  
  16. int getCharType(char ch)
  17. {
  18.     if (ch == '0' || ch == '1') {
  19.         return b_d;
  20.     }
  21.     if (ch >= '2' && ch <= '7') {
  22.         return d_2_7;
  23.     }
  24.     if (ch == 'B') {
  25.         return b_end_aka_B;
  26.     }
  27.     if (ch >= 'A' && ch <= 'F') {
  28.         return d_ACDEF;
  29.     }
  30.     if (ch == 'o') {
  31.         return o_end;
  32.     }
  33.     if (ch == 'H' || ch == 'h') {
  34.         return h_end;
  35.     }
  36.     if (ch == '8' || ch == '9') {
  37.         return d_89;
  38.     }
  39.    
  40.     return -1;
  41. }
  42.  
  43. int checkTheString(std::string strIn)
  44. {
  45.     bool loopShouldGo = true;
  46.     int lastIndexFromAcceptedString = -1;
  47.    
  48.     int state = 1;
  49.     int chType;
  50.     for (int i = 0; i < strIn.length(); i++) {
  51.         char ch = strIn[i];
  52.         chType = getCharType(ch);
  53.         if (chType == -1) {
  54.             loopShouldGo = false;
  55.             break;
  56.         }
  57.         state = tran[state - 1][chType];
  58.         if (state == 0) {
  59.             loopShouldGo = false;
  60.             break;
  61.         }
  62.         if (isFinalState[state - 1]) {
  63.             lastIndexFromAcceptedString = i;
  64.         }
  65.     }
  66.    
  67.     return lastIndexFromAcceptedString;
  68. }
  69.  
  70. void findAllSubstrings(std::string strIn)
  71. {
  72.     int quantOfApproved = 0;
  73.    
  74.     std::string subStr;
  75.     for (int i = 0; i < strIn.length(); i++) {
  76.         subStr = strIn.substr(i, (int)strIn.length() - i);
  77.         int lastIndexFromAcceptedString = checkTheString(subStr);
  78.         if (lastIndexFromAcceptedString > -1) {
  79.             if (quantOfApproved == 0) {
  80.                 std::cout << "Одобренные подстроки:\n";
  81.             }
  82.             quantOfApproved++;
  83.             std::cout << subStr.substr(0, lastIndexFromAcceptedString + 1) << "\n";
  84.             strIn.erase(i, lastIndexFromAcceptedString + 1);
  85.             i--;
  86.         }
  87.     }
  88.    
  89.     if (quantOfApproved == 0) {
  90.         std::cout << "Одобренных подстрок нет\n";
  91.     } else {
  92.         std::cout << "Одобренных подстрок " << quantOfApproved << " штук.\n";
  93.     }
  94. }
  95.  
  96. int main(int argc, const char * argv[]) {
  97.     std::string strIn;
  98.     std::cout << "Введите строку для проверки:\n";
  99.     getline(std::cin, strIn);
  100.  
  101.     findAllSubstrings(strIn);
  102.    
  103.     std::cout << "\nПрограмма завершена.\n";
  104.     return 0;
  105. }
  106.  
Advertisement
Add Comment
Please, Sign In to add comment