[剑指Offer] 53.表示数值的字符串
题目描述
请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100","5e2","-123","3.1416"和"-1E-16"都表示数值。 但是"12e","1a3.14","1.2.3","+-5"和"12e+4.3"都不是
【思路】本题要注意考虑各种情况,下面代码有详解
1 class Solution { 2 public: 3 bool isNumeric(char* string) 4 { 5 //标记数字、正负号、小数点、E或e是否出现 6 bool num = false,sign = false,point = false,hasE = false; 7 for(int i = 0;i < strlen(string);i ++){ 8 if(string[i] == '+' || string[i] == '-'){ 9 //如果正负号前有数字或多余的正负号,返回false 10 if(sign == true || num == true) return false; 11 else sign = true; 12 }else if(string[i] == '.'){ 13 //如果小数点出现在e之后或有多余小数点,返回false 14 if(point == true || hasE == true) return false; 15 else point = true; 16 }else if(string[i] == 'e' || string[i] == 'E'){ 17 //如果e出现在末尾或有多余的e,返回false 18 if(hasE == true || i == strlen(string) - 1) return false; 19 else{ 20 num = false; 21 sign = false; 22 hasE = true; 23 } 24 //如果出现非数字,返回false 25 }else if(string[i] < '0' || string[i] > '9'){ 26 return false; 27 }else{//如果出现的是数字,将num赋为true 28 num = true; 29 } 30 } 31 //若能扫描到字符串末尾,返回true 32 return true; 33 } 34 35 };