劍指offer之表示數值的字串
阿新 • • 發佈:2018-10-31
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;
}