劍指offer 面試題20:表示數值的字串
阿新 • • 發佈:2018-11-19
請實現一個函式用來判斷字串是否表示數值(包括整數和小數)。例如,字串"+100","5e2","-123","3.1416"和"-1E-16"都表示數值。 但是"12e","1a3.14","1.2.3","+-5"和"12e+4.3"都不是。
可以用A[.[B]][e|EC]或者.B[e|EC]表示,其中A和C都是整數(可以有正負號也可以沒有),B是一個無符號整數
class Solution { public: bool scanUnsignedInteger(char ** str) //掃描無符號整數 { char * before =*str; while(**str!='\0' && **str>='0'&&**str<='9') ++(*str); return *str > before; //看是否真正有數字 } bool scanInteger(char ** str) //掃描可能帶符號的整數 { if(**str =='+' || **str=='-') ++(*str); //看是否有正負號 return scanUnsignedInteger(str); } bool isNumeric(char* string) { if(string==nullptr) return false; bool num = scanInteger(&string); //傳string的地址,可以記錄當前操作到原始資料的哪個位置 if(*string == '.') //遇到小數點 { ++string; //.123 0.123 223. 223.0 223.5 //小數點後有數字,小數點前有數字,小數點前後都有數字 num = scanUnsignedInteger(&string) ||num ;//滿足前面是數字小數點或者後面是無符號數字 } if(*string == 'e' ||*string == 'E') //遇到指數 { ++string; //e前面沒數字,整個字元不能代表數字,.e1 e1 //e後面沒數字,整個字元不能代表數字,如12e 1e5.2 num = scanInteger(&string) && num; //前面滿足數字條件並且e後面是有符號數字 } return num && *string=='\0'; } };