题目地址:https://leetcode-cn.com/problems/biao-shi-shu-zhi-de-zi-fu-chuan-lcof/
题目描述
请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。
题目示例
例如,字符串"+100"、"5e2"、"-123"、"3.1416"、"0123"及"-1E-16"都表示数值,但"12e"、"1a3.14"、"1.2.3"、"+-5"及"12e+5.4"都不是。
解题思路
具体思路和步骤分如下
- Step1:去掉字符串s的首尾空格
- Step2:根据e划分指数和底数,若指数为空,则判断底数,否则,判断指数和底数是否合法
- Step3:调用指数判断函数judgeS()和底数判断函数judgeP(),分别判断指数和底数是否满足题目要求
程序源码
class Solution { public: bool isNumber(string s) {
/*去掉字符串首尾空格*/ if(s.size() < 1) return false; s.erase(0, s.find_first_not_of(' ')); s.erase(s.find_last_not_of(' ') + 1); int e = s.find('e'); //根据e来划分指数和底数
//指数为空,判断底数 if(e == string::npos) return judgeP(s);
//指数不为空,判断底数和指数 else return judgeP(s.substr(0,e))&&judgeS(s.substr(e+1)); }
/*底数合法性判断*/ bool judgeP(string s) { bool res=false,point=false; for(int i = 0;i < s.size(); ++i) { if(s[i] == '+'|| s[i] == '-'){ //符号位不在第一位,返回false if(i != 0) return false; } else if(s[i] == '.'){ //多个小数点,返回false if(point) return false; point = true; } else if(s[i] < '0'|| s[i] > '9'){ //非法字符,即非纯数字,返回false return false; } else{ res = true; } } return res; }
/*指数合法性判断*/ bool judgeS(string s) { bool res=false; for(int i = 0;i < s.size(); ++i) { if(s[i] == '+' || s[i] == '-'){ if(i != 0) return false; } else if(s[i] < '0'||s[i] > '9'){ return false; } else{ res = true; } } return res; } };