题目描述
请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100","5e2","-123","3.1416"和"-1E-16"都表示数值。 但是"12e","1a3.14","1.2.3","+-5"和"12e+4.3"都不是。
有个比较奇怪的问题,for(int i=0;i<s.length();i++){} ,会报错,warning: comparison of integers of different signs: 'int' and 'size_type'
将s,length()强制类型转换为int则不会出错
class Solution { public: bool isInteger(string s){ int len = s.length(); for(int i=0;i<len;i++){ if(s[i]>='0' && s[i]<='9'){ continue; }else{ if(i==0 && (s[i]=='+'||s[i]=='-')){ continue; }else{ return false; } } } return true; } bool isFloat(string s){ int ct = 0; int len = s.length(); for(int i=0;i<len;i++){ if(s[i]>='0' && s[i]<='9'){ continue; }else{ if(i==0 && (s[i]=='+'||s[i]=='-')){ continue; }else if(i!=0 && i!=len-1 && s[i]=='.' && ct==0){ ct++; continue; }else{ return false; } } } return true; } bool isENumber(string s){ int len = s.length(); for(int i=0;i<len;i++){ if(s[i]=='e' || s[i]=='E'){ string s1 = s.substr(0,i); string s2 = s.substr(i+1,s.length()-1-i); if(s1 == "" || s2==""){ return false; } if((isInteger(s1) || isFloat(s1)) && isInteger(s2)){ return true; }else{ return false; } } } return false; } bool isNumeric(char* str) { //整数,只能有一个加减号在开头位置,其余都是数字 //小数,只能有一个加减号在开头位置,小数点有且只有一个在中间位置,其余都是数字 //指数,e/E 前面是一个合法的小数或整数,后面是一个合法的整数 string s; s = str; if(s == ""){ return false; } if(isENumber(s) || isInteger(s) || isFloat(s)){ return true; }else{ return false; } } };