劍指Offer 054 表示數值的字串

2021-07-12 06:56:00 字數 1653 閱讀 4671

牛客oj:表示數值的字串

九度oj:未收錄

github**: 054-表示數值的字串

csdn題解:劍指offer–054-表示數值的字串

牛客oj

九度oj

csdn題解

github**

054-表示數值的字串

未收錄劍指offer–054-表示數值的字串

054-表示數值的字串

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

例如,

字串」+100」,」5e2」,」-123」,」3.1416」和」-1e-16」都表示數值。

但是」12e」,」1a3.14」,」1.2.3」,」+-5」和」12e+4.3」都不是。

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

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

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

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

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

* 首先看第乙個字元是不是正負號。

* 如果是,在字串上移動乙個字元,繼續掃瞄剩餘的字串中0到9的數字。

* 如果是乙個小數,則將遇到小數點。

* 另外,如果是用科學計數法表示的數值,在整數或者小數的後面還有可能遇到』e』或者』e』。

#include 

using

namespace

std;

// 除錯開關

#define __tmain main

#ifdef __tmain

#define debug cout

#else

#define debug 0 && cout

#endif // __tmain

class solution

// 可能遇見符號+/-

if(*str == '+' || *str == '-')

if(*str == '\0')

bool numberic = true;

// 處理可能遇見的數字

scandigits(&str);

if(*str != '\0')

}else

if(*str == 'e' || *str == 'e')

else

}return numberic && *str == '\0';

}void scandigits(char **str)

}bool i***ponential(char **str)

++(*str);

if(**str == '+' || **str == '-')

if(**str == '\0')

scandigits(str);

return (**str == '\0') ? true : false;

}};int __tmain( )

劍指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 都不是。本題考查對字串的程式設計能力,我們需要從不同型別的數值中分析規律,要全面考慮數值整數,小數,指...