Validate if a given string can be interpreted as a decimal number.
Some examples:
"0"
=> true
" 0.1 "
=> true
"abc"
=> false
"1 a"
=> false
"2e10"
=> true
" -90e3 "
=> true
" 1e"
=> false
"e3"
=> false
" 6e-1"
=> true
" 99e2.5 "
=> false
"53.5e93"
=> true
" --6 "
=> false
"-+3"
=> false
"95a54e53"
=> false
Note: It is intended for the problem statement to be ambiguous. You should gather all requirements up front before implementing one. However, here is a list of characters that can be in a valid decimal number:
- Numbers 0-9
- Exponent - "e"
- Positive/negative sign - "+"/"-"
- Decimal point - "."
Of course, the context of these characters also matters in the input.
Update (2015-02-10):
The signature of the
The signature of the
C++
function had been updated. If you still see your function signature accepts a const char *
argument, please click the reload button to reset your code definition.- method1: a number can be "-----(+/-)dddd.dddde(+/-)dddd-----" ('-' denotes space, 'd' denotes digit)
- those characters must appear in order, if they exist
- if 'e' exists, there must exist digits before and after 'e'
- there must exist at least one digit
- there cannot exist other characters
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | class Solution { public: bool isNumber(string s) { bool hasdot = false, hasdigitbeforedot = false, hasdigitafterdot = false; bool hase = false, hasdigitaftere = false; int n = s.size(), i = 0; //beginning space while(i<n && s[i]==' ') i++; //sign of number if(i<n && (s[i]=='+'||s[i]=='-')) i++; //digit before dot while(i<n && isdigit(s[i])){i++; hasdigitbeforedot = true;} //dot if(i<n && s[i]=='.'){ i++; hasdot = true; //digit after dot while(i<n && isdigit(s[i])){i++; hasdigitafterdot = true;} } //exp if(i<n && s[i]=='e'){ hase = true; i++; //sign of exp if(i<n && (s[i]=='+'||s[i]=='-')) i++; //digit after e while(i<n && isdigit(s[i])){i++; hasdigitaftere = true;} if(!hasdigitaftere) return false; } //ending space while(i<n && s[i]==' ') i++; return (i==n && (hasdigitbeforedot||hasdigitafterdot)); } }; |
No comments:
Post a Comment