数字判断

步骤:

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 };

 

posted @ 2020-05-28 12:57  糖糖_彭  阅读(248)  评论(0编辑  收藏  举报