這是《劍指offer》上的一道題,剛開始覺得這是一道挺簡單的題目,後來發現自己太年輕了,考慮的因素太少了,思考了而是分鐘還是無從下手,看了作者的思路深深被他折服了,題目如下:
請實現乙個函式用來判斷字串是否表示數值(包括整數和小數)。例如,字串 "+100"、"5e2"、"-123"、"3.1415" 以及 "-1e-16" 都表示數值,但"12e"、"1a3.14"、"1.2.3"、"+-5" 以及 "12e+5.4" 都不是表示數值的字串遵循模式 a[.[b]][e|ec] 或者 .b[e|ec],其中 a 為數值的整數部分,b 緊跟著小數點為數值的小數部分,c 緊跟著 'e' 或者 'e' 為數值的指數部分。在消暑利可能沒有數值的整數部分。例如,小數 .123 等於 0.123。因此 a 部分不是必需的。如果乙個數沒有整數部分,那麼它的小數部分不能為空。
上述 a 和 c 都是可能以 '+' 或者 '-' 開頭的 0~9 的數字串;b 也是 0~9 的數字串,但前面不能有正負號。
以表示數值的字串 "123.45e+6" 為例,"123" 是它的整數部分 a,"45" 是它的小數部分 b,"+6" 是它的指數部分 c。
判斷乙個字串是否符合上述模式,首先應該掃瞄 0~9 的數字,也就是上面數值中表示整數的 a 部分。如果遇到小數點,則開始掃瞄數值小數部分 b。如果遇到 'e' 或者 'e',則開始掃瞄表示數值指數的 c 部分。根據這樣的思路,給出參考**:
public class main;
// 先遍歷字串的整數部分
boolean numeric = scaninteger(str,index);
// 碰到小數點時,開始遍歷 b 部分
if(index[0]='0' && str[index[0]]<='9')
index[0]++;
return index[0]>before;
}}
更多《劍指offer》的題目以及源**可以參考我的 github 。 劍指offer之字串
目錄 面試題5 替換空格 面試題19 正規表示式匹配 面試題20 表示數值的字串 面試題38 字串的排列 面試題48 最長不含重複字元的子字串 面試題50 第乙個只出現一次的字元 拓展 字元流中第乙個不重複的字元 面試題58 翻轉單詞順序 拓展 左旋轉字串 面試題61 撲克牌中的順子 面試題67 把...
劍指offer 字串
問題描述 class solution auto res temp.c str strcpy str,res strcpy 關於c 中string和char 的區別參考 問題描述 請實現乙個函式用來匹配包括 和 的正規表示式。模式中的字元 表示任意乙個字元,而 表示它前面的字元可以出現任意次 包含0...
劍指offer 字串
問題描述 function replacespace str 問題描述 請實現乙個函式用來匹配包括 和 的正規表示式。模式中的字元 表示任意乙個字元,而 表示它前面的字元可以出現任意次 包含 0 次 在本題中,匹配是指字串的所有字元匹配整個模式。例如,字串 aaa 與模式 a.a 和 ab ac a...