面試題20 表示數值的字串

2021-10-06 03:26:38 字數 1325 閱讀 1835

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

示例:

輸入:+100

輸出: true

思想:這個題最簡單的做法就是遍歷字串,判斷字串是否符合標準,但是這個好麻煩?,特別是測試用例,好多奇怪的測試用例。

那我們根據上述例子可以將符合標準的字串分為兩類規格:

那我們可以寫出兩個函式,乙個判斷是否在【+,-,0~9】,乙個判斷是否在【0~9】範圍內。

我們定義isnum(string &s,int &i)函式來判斷字串從i位置開始是否在[0~9]之間。

定義isstart(string &s,int &i)函式判斷字串從 i 位置開始是否在【+,-,0~9】之間,我們先判斷是否和+,-相等,相等就i++,然後呼叫判斷數字的函式isnum即可。

這個就是我們需要實現的函式,我們下面就遍歷字串,然後呼叫:

我們需要明確幾個點:

那我們給出**:

bool

isnum

(string &s,

int&i)

if(i>temp)

//表示s[i]符合要求,或者小數點後無資料也正確

return

false;}

//判斷整數部分是否為+-0~9,

bool

isstart

(string &s,

int&i)

bool

isnumber

(string s)

//存在指數,後面資料必須全為數字

if(s[i]

=='e'

||s[i]

=='e'

)//去除結尾空格

while

(s[i]

==' '

) i++;if

(!flag || i!=s.

size()

)return

true;}

intmain()

這個題目力扣的測試用例比較特殊,所以需要考慮到很多特殊情況,所以需要多次提交探索,還有一種是永動機處理解決,從編譯原理角度處理,博主不才,放棄了。

加油哦!?。

面試題20 表示數值的字串

題目 請實現乙個函式用來判斷字串是否表示數值 包括整數和小數 例如,字串 100 5e2 123 3.1416 及 1e 16 都表示數值,但 12e 1a3.14 1.2.3 5 及 12e 5.4 都不是。includeusing namespace std bool scanunsignedi...

面試題54 表示數值的字串

請實現乙個函式用來判斷字串是否表示數值 包括整數和小數 例如,字串 100 5e2 123 3.1416 和 1e 16 都表示數值。但是 12e 1a3.14 1.2.3 5 和 12e 4.3 都不是。這道題沒什麼別的技巧,按照數值的表示規則,逐個掃瞄字串,看是否符合要求。數值有如下幾種情況 1...

面試題55 表示數值的字串

題目描述 請實現乙個函式用來判斷字串是否表示數值 包括整數和小數 例如,字串 100 5e2 123 3.1416 和 1e 16 都表示數值。但是 12e 1a3.14 1.2.3 5 和 12e 4.3 都不是。思路 1 在數值字串的最前面,可能有乙個字元表示 號。正負號之後,注意 如果是字串結...