Advertisement
Nasekoma

4sem-8-2

Apr 30th, 2020
322
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.11 KB | None | 0 0
  1. #include <iostream>
  2. #include <string>
  3. #include <cctype>
  4.  
  5. char free_reading() {
  6.     char symb;
  7.     while((symb = (char)getchar()) != EOF && !isspace(symb));
  8.     return symb;
  9. }
  10.  
  11. char space_reading() {
  12.     char symb;
  13.     while((symb = (char)getchar()) != EOF && isspace(symb));
  14.     return symb;
  15. }
  16.  
  17. char reading(int &k0, int &m1, int &is_word, int flag) {
  18.     is_word = 1;
  19.     char symb;
  20.     //flag == 0 while symb == '0', then flag = 1
  21.     while((symb = (char)getchar()) != EOF && !isspace(symb)) {
  22.         if(symb != '1' && symb != '0') {
  23.             symb = free_reading();
  24.             is_word = 0;
  25.             break;
  26.         } else if(!flag && symb == '1') {
  27.             flag = 1;
  28.             m1++;
  29.         } else if(!flag) {
  30.             //symb == '0'
  31.             k0++;
  32.         } else if(symb == '1') {
  33.             //flag == 0
  34.             m1++;
  35.         } else {
  36.             //flag == 1
  37.             //symb == '0'
  38.             break;
  39.         }
  40.     }
  41.     return symb;
  42. }
  43.  
  44. void check() {
  45.     char symb;
  46.     int is_word, k = 0, m = 0, k2, m2;
  47.     //flag == 0 while reading first 0^k 1^m, then flag == 1
  48.  
  49.     symb = space_reading();
  50.     if(symb == EOF) throw(-1);
  51.     if(symb != '0' && symb != '1') {
  52.         if(!isspace(symb)) symb = free_reading();
  53.         if(symb == EOF) throw(-2);
  54.         throw(0);
  55.     } else if (symb == '0') {
  56.         k = 1;
  57.         symb = reading(k, m, is_word, 0);
  58.     } else {
  59.         m = 1;
  60.         symb = reading(k, m, is_word, 1);
  61.     }
  62.     if(!is_word) {
  63.         if(symb == EOF) throw(-2);
  64.         if(!isspace(symb)) free_reading();
  65.         throw(0);
  66.     }
  67.     if(symb == EOF) throw(-3);
  68.     if(isspace(symb)) throw(1);
  69.  
  70.     while(symb != EOF && !isspace(symb)) {
  71.         k2 = 0;
  72.         m2 = 0;
  73.         if(symb != '0' && symb != '1') {
  74.             throw(0);
  75.         } else if (symb == '0') {
  76.             k2 = 1;
  77.             symb = reading(k2, m2, is_word, 0);
  78.         } else {
  79.             m2 = 1;
  80.             symb = reading(k2, m2, is_word, 1);
  81.         }
  82.         if(!is_word || k != k2 || m != m2) {
  83.             if(symb == EOF) throw(-2);
  84.             if(!isspace(symb)) symb = free_reading();
  85.             if(symb == EOF) throw(-2);
  86.             throw(0);
  87.         }
  88.         if(symb == EOF) throw(-3);
  89.         if(isspace(symb)) throw(1);
  90.     }
  91.     if(symb == EOF) throw(-3);
  92.     if(isspace(symb)) throw(1);
  93. }
  94.  
  95. int main()
  96. {
  97.     std::string word;
  98.     while(1) {
  99.         try {
  100.             check();
  101.         } catch(int flag) {
  102.             //flag < 0 when EOF:
  103.             //flag == -1 when no word
  104.             //flag == -2 when the word is not from language
  105.             //flag == -3 when the word is from language
  106.             //flag == 0 when the word is not from language
  107.             //flag == 1 when the word is from language
  108.             if(flag == -1) break;
  109.             if(flag == -2) {
  110.                 std::cout<<0<<std::endl;
  111.                 break;
  112.             }
  113.             if(flag == -3) {
  114.                 std::cout<<1<<std::endl;
  115.                 break;
  116.             }
  117.             std::cout<<flag<<std::endl;
  118.         }
  119.     }
  120.     return 0;
  121. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement