剑指offer 表示数值的字符串
题目:请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100","5e2","-123","3.1416"和"-1E-16"都表示数值。 但是"12e","1a3.14","1.2.3","+-5"和"12e+4.3"都不是。
代码:
class Solution { public: bool isNumeric(char* string) { static bool symbol=1,sign=1,dot=1;; if(*string=='\0' && *(string-1)!='\0'){ symbol=sign=dot=1;return true;} else if(*string>='0'&&*string<='9') return isNumeric(string+1); //判断正负号存在 else if((*string=='+' || *string=='-') && ((*(string+1)>='0'&&*(string+1)<='9')||*(string+1)=='.') && !(*(string-1)>='0'&&*(string-1)<='9') && symbol){ symbol=0;return isNumeric(string+1);} //判断小数点的存在 else if(*string=='.' && (*(string+1)>='0'&&*(string+1)<='9') && ((*(string-1)>='0'&&*(string-1)<='9')||(*(string-1)=='+' || *(string-1)=='-')) && dot ){ dot=0;return isNumeric(string+1);} //e存在时 else if((*string=='e'||*string=='E') && (*(string-1)>='0'&&*(string-1)<='9') && *(string+1)!='\0' && sign){ symbol=1;sign=0;return isNumeric(string+1);} else return false; } };
我的笔记:需注意每个if与else的匹配规则,若想并行判断,则需要使用else if 这样可避免一个字符进行多次if判断。