Advertisement
Guest User

Untitled

a guest
Nov 15th, 2019
95
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.00 KB | None | 0 0
  1. #include <iostream>
  2. #include <fstream>
  3. #include <string>
  4.  
  5.  
  6.  
  7. using namespace std;
  8. // Sign = + | -
  9. bool isSign(const char* number, unsigned int& ptr)
  10. {
  11.     if (number[ptr] == '+' || number[ptr] == '-' )
  12.     {
  13.         ++ptr;
  14.         return true;
  15.     }
  16.  
  17.     return false;
  18. }
  19.  
  20. //isDigit = 0 | 1 | 2 | 3 | 4 | 5 | 6 |7 | 8 | 9
  21. bool isDigit(const char* number, unsigned int& ptr)
  22. {
  23.     if (number[ptr] >= '0' && number[ptr] <= '9')
  24.     {
  25.         ++ptr;
  26.         return true;
  27.     }
  28.     return false;
  29. }
  30.  
  31. //unsigned number = <Digit> | <Digit> <unsigned number>
  32. bool unsigned_number(const char* number, unsigned int& ptr)
  33. {
  34.  
  35.     if (!isDigit(number, ptr))
  36.         return false;
  37.     return unsigned_number(number, ptr);
  38. }
  39.  
  40. //order = E <Sign> <unsigned number>
  41. bool order(const char* number, unsigned int& ptr)
  42. {
  43.     if (number[ptr - 1] == '.' || number[ptr] != 'E' || !isSign(number, ++ptr) || number[ptr] == '\0' )
  44.         return false;
  45.  
  46.     unsigned_number(number, ptr);
  47.     if (number[ptr] == '\0')
  48.         return true;
  49.  
  50.     return false;
  51. }
  52.  
  53. //mantiss = <unsigned_number>.<unsigned number> | <unsigned_number>
  54. bool mantiss(const char* number, unsigned int& ptr)
  55. {
  56.     if (!unsigned_number(number, ptr) && number[ptr] == '.' && ptr!=0)
  57.         return !(unsigned_number(number, ++ptr));
  58.     return true;
  59. }
  60.  
  61. //<isReal> ::= <matiss> <order> || <sign> <mantis> <order>
  62. bool isReal(const char* number, unsigned int ptr = 0) // n
  63. {
  64.     if (mantiss(number, ptr) && order(number, ptr) && *number != '\0')
  65.         return true;
  66.     else if (isSign(number, ptr) && mantiss(number, ptr) && order(number, ptr) && *number != '\0')
  67.         return true;
  68.     else
  69.     return false;
  70. }
  71.  
  72.  
  73.  
  74. const char* FLIE_NOT_OPEN = "Could not open file!";
  75. int main()
  76. {
  77.     try
  78.     {
  79.         fstream fin;
  80.         string path = "input.txt";
  81.         fin.open(path, fstream::in);
  82.         if (!fin.is_open()) throw FLIE_NOT_OPEN;
  83.         char* num = new char[255];
  84.         fin >> num;
  85.         cout << ((isReal(num)) ? "true" : "false") << endl;
  86.         fin.close();
  87.         delete[] num;
  88.         return 0;
  89.     }
  90.     catch (const char* err)
  91.     {
  92.         cerr << endl << err << endl;
  93.         return -1;
  94.     }
  95. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement