面试题20. 表示数值的字符串

Posted ocpc

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了面试题20. 表示数值的字符串相关的知识,希望对你有一定的参考价值。

题目:

技术图片

 

 

解答:

1)先去除字符串首尾的空格
2)然后根据e划分指数和底数
3)判断指数和底数是否合法即可

 1 class Solution {
 2 public:
 3     bool isNumber(string s) {
 4         //1、从首尾寻找s中不为空格首尾位置,也就是去除首尾空格
 5         int i=s.find_first_not_of( );
 6         if(i==string::npos)
 7         {
 8             return false;
 9         }
10         int j=s.find_last_not_of( );
11         s=s.substr(i,j-i+1);
12         if(s.empty())
13         {
14             return false;
15         }
16 
17         //2、根据e来划分底数和指数
18         int e=s.find(e);
19 
20         //3、指数为空,判断底数
21         if(e==string::npos)
22         {
23             return judgeP(s);
24         }
25 
26         //4、指数不为空,判断底数和指数
27         else 
28         {
29             return judgeP(s.substr(0,e))&&judgeS(s.substr(e+1));
30         }
31     }
32 
33     bool judgeP(string s)//判断底数是否合法
34     {
35         bool result=false,point=false;
36         int n=s.size();
37         for(int i=0;i<n;++i)
38         {
39             if(s[i]==+||s[i]==-){//符号位不在第一位,返回false
40                 if(i!=0)return false;
41             }
42             else if(s[i]==.){
43                 if(point)return false;//有多个小数点,返回false
44                 point=true;
45             }
46             else if(s[i]<0||s[i]>9){//非纯数字,返回false
47                 return false;
48             }
49             else{
50                 result=true;
51             }
52         }
53         return result;
54     }
55 
56     bool judgeS(string s)//判断指数是否合法
57     {   
58         bool result=false;
59         //注意指数不能出现小数点,所以出现除符号位的非纯数字表示指数不合法
60         for(int i=0;i<s.size();++i)
61         {
62             if(s[i]==+||s[i]==-)
63             {
64                 //符号位不在第一位,返回false
65                 if(i!=0)
66                 {
67                     return false;
68                 }
69             }
70             else if(s[i]<0||s[i]>9)
71             {
72                 //非纯数字,返回false
73                 return false;
74             }a
75             else
76             {
77                 result=true;
78             }
79         }
80         return result;
81     }
82 };

 

以上是关于面试题20. 表示数值的字符串的主要内容,如果未能解决你的问题,请参考以下文章

剑指offer——面试题20:表示数值的字符串

面试题20. 表示数值的字符串

面试题20. 表示数值的字符串

leetcode-65-面试题20-表示数值的字符串

2021-12-24:划分字母区间。 字符串 S 由小写字母组成。我们要把这个字符串划分为尽可能多的片段,同一字母最多出现在一个片段中。返回一个表示每个字符串片段的长度的列表。 力扣763。某大厂面试

剑指Offer-面试案例面试题66:把字符串转为整数