Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <string>
- #include <cctype>
- char free_reading() {
- char symb;
- while((symb = (char)getchar()) != EOF && !isspace(symb));
- return symb;
- }
- char space_reading() {
- char symb;
- while((symb = (char)getchar()) != EOF && isspace(symb));
- return symb;
- }
- char reading(int &k0, int &m1, int &is_word, int flag) {
- is_word = 1;
- char symb;
- //flag == 0 while symb == '0', then flag = 1
- while((symb = (char)getchar()) != EOF && !isspace(symb)) {
- if(symb != '1' && symb != '0') {
- symb = free_reading();
- is_word = 0;
- break;
- } else if(!flag && symb == '1') {
- flag = 1;
- m1++;
- } else if(!flag) {
- //symb == '0'
- k0++;
- } else if(symb == '1') {
- //flag == 0
- m1++;
- } else {
- //flag == 1
- //symb == '0'
- break;
- }
- }
- return symb;
- }
- void check() {
- char symb;
- int is_word, k = 0, m = 0, k2, m2;
- //flag == 0 while reading first 0^k 1^m, then flag == 1
- symb = space_reading();
- if(symb == EOF) throw(-1);
- if(symb != '0' && symb != '1') {
- if(!isspace(symb)) symb = free_reading();
- if(symb == EOF) throw(-2);
- throw(0);
- } else if (symb == '0') {
- k = 1;
- symb = reading(k, m, is_word, 0);
- } else {
- m = 1;
- symb = reading(k, m, is_word, 1);
- }
- if(!is_word) {
- if(symb == EOF) throw(-2);
- if(!isspace(symb)) free_reading();
- throw(0);
- }
- if(symb == EOF) throw(-3);
- if(isspace(symb)) throw(1);
- while(symb != EOF && !isspace(symb)) {
- k2 = 0;
- m2 = 0;
- if(symb != '0' && symb != '1') {
- throw(0);
- } else if (symb == '0') {
- k2 = 1;
- symb = reading(k2, m2, is_word, 0);
- } else {
- m2 = 1;
- symb = reading(k2, m2, is_word, 1);
- }
- if(!is_word || k != k2 || m != m2) {
- if(symb == EOF) throw(-2);
- if(!isspace(symb)) symb = free_reading();
- if(symb == EOF) throw(-2);
- throw(0);
- }
- if(symb == EOF) throw(-3);
- if(isspace(symb)) throw(1);
- }
- if(symb == EOF) throw(-3);
- if(isspace(symb)) throw(1);
- }
- int main()
- {
- std::string word;
- while(1) {
- try {
- check();
- } catch(int flag) {
- //flag < 0 when EOF:
- //flag == -1 when no word
- //flag == -2 when the word is not from language
- //flag == -3 when the word is from language
- //flag == 0 when the word is not from language
- //flag == 1 when the word is from language
- if(flag == -1) break;
- if(flag == -2) {
- std::cout<<0<<std::endl;
- break;
- }
- if(flag == -3) {
- std::cout<<1<<std::endl;
- break;
- }
- std::cout<<flag<<std::endl;
- }
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement