Advertisement
Guest User

Untitled

a guest
Jan 28th, 2020
69
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.21 KB | None | 0 0
  1. bool isUnsigned(const string& s)
  2. {
  3.     if(s.empty()) return false;
  4.         return all_of(s.begin(), s.end(), [](unsigned char ch) {return isdigit(ch); });
  5. }
  6.  
  7. bool isInt(const string& s)
  8. {
  9.     if (s.empty()) return false;
  10.     string::size_type start = (s.front() == '+' || s.front() == '-' ? 1 : 0);
  11.     return isUnsigned(s.substr(start));
  12. }
  13.  
  14. bool isRational(const string& s)
  15. {
  16.     if (s.empty()) return false;
  17.     auto end = s.rfind('.');
  18.     if (end == string::npos) return isInt(s);
  19.     else
  20.     {
  21.         string::size_type start = (s.front() == '+' || s.front() == '-' ? 1 : 0);
  22.             auto isEmpty = start == end;
  23.         if (!isEmpty && !isInt(s.substr(0, end))) return false;
  24.         if (isEmpty && end == s.size() - 1) return false;
  25.         if (end != s.size() -1 && !isUnsigned(s.substr(end + 1))) return false;
  26.     }
  27.     return true;
  28. }
  29.  
  30. class Solution {
  31. public:
  32.     bool isNumber(string& s)
  33.         {
  34.         s.erase(s.begin(), find_if(s.begin(), s.end(), [](unsigned char ch) {return !isspace(ch); }));
  35.         s.erase(find_if(s.rbegin(), s.rend(), [](unsigned char ch) {return !isspace(ch); }).base(), s.end());
  36.         auto ePos = s.find('e');
  37.         if (ePos == string::npos) return isRational(s);
  38.         return isRational(s.substr(0, ePos)) && isInt(s.substr(ePos + 1));
  39.     }
  40. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement