面试题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. 表示数值的字符串的主要内容,如果未能解决你的问题,请参考以下文章
2021-12-24:划分字母区间。 字符串 S 由小写字母组成。我们要把这个字符串划分为尽可能多的片段,同一字母最多出现在一个片段中。返回一个表示每个字符串片段的长度的列表。 力扣763。某大厂面试