劍指Offer20 表示數值的字串

2021-10-02 23:58:22 字數 2045 閱讀 6269

【題目】:請實現乙個函式用來判斷字串是否表示數值(包括整數和小數)。

例如,字串**"+100",「5e2」,"-123",「3.1416"和」-1e-16"**都表示數值。 但是"12e",「1a3.14」,「1.2.3」,"±5"和"12e+4.3"都不是。

考察的是:模式匹配的策略

**的完整性

我們首先分析一下子可能是數值的字串的格式

在數值之前可能有乙個表示正負的』-『或者』+』。

接下來是若干個0到9的數字表示數值的整數部分(在某些小數里可能沒有數值的整數部分)。

如果數值是乙個小數,那麼在小數點後面可能會有若干個0到9的數字表示數值的小數部分。如果數值用科學計數法表示,接下來是乙個』e』或者『e』,以及緊跟著的乙個整數(可以有正負號)表示指數。

表示數值的字串遵循模式 a[.[b]][e|ec]或者.b[e|ec]

package c字串;

/** * @author zhou jian

* @date 2020 $ 2020/2/19 0019 19:07

* 請實現乙個函式用來判斷字串是否表示數值(包括整數和小數)。

* 例如,字串"+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為數值的整數部分,b緊跟著小數點為數值的小數部分,c緊跟著`e`或者`e`為數值的指數部分

* * 上述a和c都可以是以`+』或者『-』開頭的0~9的數字串;b也是0~9的數字串,但前面不能有正負號

* *判斷乙個字串是否符合上述模式時,

* 首先應該盡可能多的掃瞄0~9的數字(有可能在起始處`+`或者`-`),也就是前面模式中表示數值整數的a部分

* * 如果遇到小數點`.`,則開始掃瞄表示數值小數部分的b部分。

* * 如果遇到`e`或者`e`,則開始掃瞄c部分

* ** *

*/public

class

problem2

public

boolean

isnumeric

(char

str)

;// 記錄是否滿足條件

boolean isnumberic =

false

;// 判斷 a

isnumberic =

isinteger

(str,index)

;/**

* 判斷 . b

* a a. a.b 均符合條件

*/if(index[0]

]=='.')

// 判斷 e c ,e 後面必須有數字

if(index[0]

(str[index[0]

]=='e'|| str[index[0]

]=='e'))if

(isnumberic && index[0]

== str.length)

else

}// 判斷輸入的字串是否包含乙個無符號整數

private

boolean

isunsignedinteger

(char

str,

int[

] index)

if(index[0]

> start)

else

}// 判斷輸入的是否包含乙個數字

private

boolean

isinteger

(char

str,

int[

] index)

return

isunsignedinteger

(str,index);}

}

劍指Offer 20 表示數值的字串

請實現乙個函式來判斷字串是否表示數值 包括整數和小數 例 字串 100 5e2 123 3.1416 1e 16 都表示數值,但 12e 1a3.14 1.2.3 5 12e 5.4 都不是。時間複雜度 o n 空間複雜度 o 1 def numeric strings s param s num ...

劍指offer 20 表示數值的字串

請實現乙個函式用來判斷字串是否表示數值 包括整數和小數 例如 字串 100 5e2 123 3.1416 和 1e 16 都表示數值 但是 12e 1a3.14 1.2.3 5 和 12e 4.3 都不是 使用指標的指標 a.b e e c 對a b c 的判斷 class solution if ...

劍指 Offer 20 表示數值的字串

題目描述 請實現乙個函式用來判斷字串是否表示數值 包括整數和小數 例如,字串 100 5e2 123 3.1416 0123 都表示數值,但 12e 1a3.14 1.2.3 5 1e 16 及 12e 5.4 都不是。解題思路 首先分析一下符合數值的字串模式,當字串遵循模式a b e ec 或者....