【題目】:請實現乙個函式用來判斷字串是否表示數值(包括整數和小數)。例如,字串**"+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 或者....