步骤:
1)先去除字符串收尾的空格
2)然后根据e划分指数和底数
3)判断指数和底数是否合法即可
1 class Solution { 2 public: 3 bool isNumber(string s) { 4 //首先去掉首尾的空格 5 int i = s.find_first_not_of(' '); 6 if (i == string::npos) return false; 7 int j = s.find_last_not_of(' '); 8 s = s.substr(i,j-i+1); 9 if(s.empty()) return false; 10 11 //根据e来划分底数和指数 12 int e = s.find('e'); 13 14 //指数为空判断底数 15 if (e == string::npos) return judgeP(s); 16 else 17 return judgeP(s.substr(0,e))&&judgeS(s.substr(e+1)); 18 //指数不为空,判断底数和指数 19 20 } 21 private: 22 bool judgeP(string s){ 23 //判断底数是否合法 24 bool result = false,point = false; 25 int n = s.size(); 26 for(int i = 0;i < n;i++) { 27 if (s[i]=='+' || s[i]=='-'){//符号位不在第一位 28 if(n!=0) return false; 29 } 30 else if(s[i]=='.') {//多个小数点 31 if(point) return false; 32 point = true; 33 } 34 else if(s[i]<'0' || s[i]>'0'){//非纯数字 35 return false; 36 } 37 else 38 return true; 39 40 } 41 return false; 42 } 43 bool judgeS(string s) { 44 //判断指数是否合法,注意指数不能出现小数点,出现任意非纯数字表示指数不合法 45 bool result = false; 46 for(int i = 0;i < s.size();i++){ 47 if(s[i]=='+' || s[i]=='-')//符号位不在第一位返回false 48 if(i!=0) return false; 49 else if(s[i]<'0' || s[i]>'9')//非纯数字返回false 50 return false; 51 else 52 return true; 53 } 54 return result; 55 } 56 };