劍指offer 表示數值的字串

2021-10-23 05:35:05 字數 1611 閱讀 5988

請實現乙個函式用來判斷字串是否表示數值(包括整數和小數)。例如,字串"+100",「5e2」,"-123",「3.1416"和」-1e-16"都表示數值。 但是"12e",「1a3.14」,「1.2.3」,"±5"和"12e+4.3"都不是。

首先,我們要明確表示數值的字串的遵循模式為下圖所示:

注意

1、其中a不是必需的,但是在此情況下小數部分不能為空

2、關於符號:a和c是以『+』或『-』開頭的0-9的數字串,b是不能以『+』或『-』開頭的0~9的數字串

3、a和c都是整數(可以有正負號也可以沒有),b是乙個無符號整形

掃瞄規則:如果遇到起始處有+』或『-』,就是a部分;如果遇到起始處有『.』,就是b部分;如果是e或者e就是c部分。

**實現我們總共分為三個函式。

scanb函式實現如下:

bool

scanb

(const

char

** str)if(

*str > before)

//表示有字元型別存在

return

true

;}

scana函式實現如下:

bool

scana

(const

char

** str)

return

scanb

(str)

;}

isnumber函式實現如下:

bool

isnumber

(const

char

* str)

int i =0;

//驗證a,必須是字元型別

bool isnumber =

scana

(&str)

;//遇到'.'驗證bif(

*str ==

'.')

//遇到'e/e',驗證cif(

*str ==

'e'||

*str ==

'e')

//到字串結尾返回結果if(

(isnumber &&

*str)

=='\0'

)else

}int

main()

else

}

在此,我們要解釋一下判斷b裡面||的用法和判斷c裡面&&的用法。

||的作用:小數可以沒有整數部分。因為只要scanb返回為真說明有掃瞄到0-9的數字,則後面numeric表示式可以不用判斷。

【舉個栗子】.123等於0.123;小數點後面可以沒有數字,例如123.等於123.0;當然小數前面和後面都可以有數字,例如123.123。這就解釋了為什麼我們用||。

&&的作用:當e或e前面沒有數字時,整個字串不能表示數字,如.e1、e1;當e或e後面沒有數字時,整個字串不能表示數字,如12e。

劍指Offer 表示數值的字串

題目 請實現乙個函式用來判斷字串是否表示數值 包括整數和小數 例如,字串 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 c表示有 或無 ...

表示數值的字串 劍指offer

這道題寫起來比較繁瑣,需要考慮 號是否出現在第乙個位置,是否出現一次,以e為分割前後是不是正確的格式,e前可以為浮點數或者整數,e後只能是整數。因此如果把函式分成三個子函式來寫就好多了,乙個函式判斷是不是整數,乙個判斷是不是浮點數,乙個判斷e前後是否合法。include include bool i...

劍指offer 表示數值的字串

請實現乙個函式用來判斷字串是否表示數值 包括整數和小數 例如,字串 100 5e2 123 3.1416 和 1e 16 都表示數值。但是 12e 1a3.14 1.2.3 5 和 12e 4.3 都不是。本題考查對字串的程式設計能力,我們需要從不同型別的數值中分析規律,要全面考慮數值整數,小數,指...