diff --git a/Strings/ValidNumber.cpp b/Strings/ValidNumber.cpp index 4d482c9..322dfc3 100644 --- a/Strings/ValidNumber.cpp +++ b/Strings/ValidNumber.cpp @@ -40,55 +40,29 @@ Yes for this problem https://www.interviewbit.com/problems/valid-number/ */ -int Solution::isNumber(const string &A) { +int Solution::isNumber(const string A) { + int i = 0; - int n = A.length(); - while (A[i]==' ') { ++i; } - if(i==n) - return 0; - - if ((A[i]=='-' || A[i]=='+') && ((A[i+1]>='0' && A[i+1]<='9') || A[i+1]=='.')) - i+=2; - else if (A[i]=='e') - return 0; - - bool eflag = false, dflag = false; - - while (i='0' && A[i+1]<='9') - i+=2; - else - return 0; - dflag = true; - } - else if (A[i]=='e') - { - if(eflag) - return 0; - eflag = true; - if ((A[i+1]=='-' || A[i+1]=='+') && (A[i+2]>='0' && A[i+2]<='9')) - i+=3; - else if (A[i+1]>='0' && A[i+1]<='9') - i+=2; - else + int len = A.length(); + int flag = 0; + while (A[i] == ' ' && i < len) + i++; + + while (i < len) { + flag = 1; + if ((A[i] >= '0' && A[i] <= '9') || (A[i] == '.') || (A[i] == '-' && i == 0) || (A[i] == ' ')) + i++; + else if (A[i] == 'e' && A[i - 1] != '.') { + i++; + while (A[i] != '.' && i < len) + i++; + if (i != len) return 0; - } - else if (A[i]>='0' && A[i]<='9') - ++i; - else if (A[i]==' ') - { - ++i; - while (A[i]==' ') { ++i; } - if(i==n) - return 1; - } - else + } else return 0; } - return 1; + + if (A[i - 1] != '.' && flag) + return 1; + return 0; }