1. 程式人生 > >劍指offer之表示數值的字串

劍指offer之表示數值的字串

1.題目描述

請實現一個函式用來判斷字串是否表示數值(包括整數和小數)。例如,字串"+100",“5e2”,"-123",“3.1416"和”-1E-16"都表示數值。 但是"12e",“1a3.14”,“1.2.3”,"±5"和"12e+4.3"都不是。

2.問題分析

其實問題不是很複雜,只是需要考慮完整,需要對每一個字元進行判斷,判斷是否是數字,是否是逗號,是否是字元’e’或者’E’。如果有字元’e’或者’E’,那麼數字就被e分成了兩部分,前一部分數可以有逗號,後一部分數沒有逗號。具體分析見程式碼:

3.原始碼

bool isNumeric(char* string)
{ if(string == NULL || *string == '\0') return false; int index = 0; //處理第一個字元是否'*'或者'-' if(string[index] == '+' || string[index] == '-') ++index; //一個數只能有一個小數點 bool douhao = true; //'e'或者'E'把一個數分成兩部分,如果字串中有'e'或者'E',那麼可能有第二部分 bool secondPart = false; while
(string[index] != '\0' ) { char c = string[index]; if(c == '.') { //只有一個逗號 if(douhao) { ++index; douhao = false; } //有兩個逗號則不是數字 else { return false;
} } //是數字,則進行下一位判斷 else if(isdigit(c)) { ++index; } //是'e'或者'E',那麼進行第二部分判斷 else if(c == 'e' || c == 'E') { ++index; secondPart = true; break; } //非逗號,非數字,非'e'或者'E',則不是數字,返回false else { return false; } } //第二部分判斷 if(secondPart) { //處理第一個字元是否'*'或者'-' if(string[index] == '+' || string[index] == '-') ++index; //看是否還有下一位 if(string[index] == '\0') return false; while(string[index] != '\0') { if(!isdigit(string[index])) return false; ++index; } } return true; }