劍指 offer20
劍指 Offer 20. 表示數值的字串
請實現一個函式用來判斷字串是否表示數值(包括整數和小數)。例如,字串"+100"、“5e2”、"-123"、“3.1416”、"-1E-16"、“0123"都表示數值,但"12e”、“1a3.14”、“1.2.3”、"±5"及"12e+5.4"都不是。
首先,我們可以看到,對於一個字串,可能存在小數點,正負號,指數符號,數值。
並且在字串的開頭和末尾部分還可能有若干個空格。因此,對於一個字串,首先要略過開頭和末尾的空格。
bool isNumber(string s) {
int n=s.size();
int index=-1;
bool hasDot= false,hasE= false,hasOp=false,hasNum= false;
while(index<n && s[++index]==' ');//開頭可能含有若干個空格
while(index<n)
{
if('0'<=s[index]&&s[index]<='9')//如果當前字串為 Num,令 hasNum=true
hasNum=true;
else if(s[index]=='e'||s[index]=='E')//如果當前字串為 E或者 e,令 hasE=true
{
if(hasE||!hasNum)//如果此前未出現數字就出現了 E或者第二次出現 E,則不合法
return false;
//對於 E 後面的字串重新考慮
hasE=true;
hasOp=false;
hasDot=false;
hasNum=false;
}else if(s[index]=='+'||s[index]=='-')//當前字元為正負號
{
if(hasOp||hasNum||hasDot)
return false;
}else if(s[index]=='.')//當前字元為.
{
if(hasDot||hasE)
return false;
hasDot=true;
}else if(s[index]==' ')//當前字元為空格,則跳出迴圈
{
break;
} else{
return false;
}
++index;
}
while(index<n &&s[++index]==' ');//末尾可能含有若干個空格
return hasNum &&index==n;
}
相關文章
- 刷劍指
- 劍指OFFER
- 劍指1
- 劍指offer導航
- Leetcode劍指offer(八)LeetCode
- 劍指offer16
- 劍指 offer21
- 劍指Offer題解合集
- 【劍指Offer】矩形覆蓋
- 劍指offer——跳臺階
- 六、劍指 Offer(25~29)
- 劍指Spring原始碼(二)Spring原始碼
- 劍指Spring原始碼(一)Spring原始碼
- 劍指offer-JavaScript版JavaScript
- 劍指offer刷題記錄
- 劍指offer-第2章
- 劍指offer第41~50題
- 劍指 offer(1) -- 陣列篇陣列
- 【劍指offer】【2】字串的空格字串
- 劍指immer,更快更強的limu
- 劍指 Offer 38. 字串的排列字串
- 《劍指 Offer》棧實現佇列佇列
- 劍指offer刷題day02
- LeetCode|劍指 Offer 49.醜數LeetCode
- 劍指offer第49題 醜數
- 劍指offer——重建二叉樹二叉樹
- 劍指Offer 表示數值的字串字串
- 劍指Offer 撲克牌順子
- 【劍指offer】2.替換空格
- 劍指offer-替換空格02
- 劍指offer解析-上(Java實現)Java
- 劍指offer解析-下(Java實現)Java
- 劍指offer 變態跳臺階
- mysql 索引十連問| 劍指 offer - mysqlMySql索引
- 秒殺劍指offer系列(41-50)
- LeetCode 劍指 Offer 05. 替換空格LeetCode
- 劍指offer之順序列印陣列陣列
- 劍指offer(四)重建二叉樹二叉樹