タイトル説明
文字列が(整数および端数を含む)の値を表しているかどうかを決定するために使用される機能を実現します。例えば、文字列 "100"、 "5E2"、 " - 123"、 "3.1416" および "-1E-16" の値を示しています。しかし、 "12E"、 "1a3.14"、 "1.2.3"、 "+ - 5" と "12E + 4.3" もありません。
ソリューション:
数を表すパターン文字列以下のA [[B]] [ELEC ] または.B [エレキ] Aは、値の整数部分であり、Bは小数点値の小数部分に続く、Cは、E「またはEに従っ「指数部の値です。値の10進整数部分には存在しないかもしれません。たとえば、小数点以下は0.123 0.123に等しいです。
一部ことが必要ではありません。数は整数部ではない場合、その小数部分は空にすることはできません。
1 クラスソリューション{ 2 公共: 3。 BOOL ISNUMERIC(CHAR * 文字列) 4。 { 5。 IF(文字列 == nullptr A)リターン falseに、 6。 7。 BOOL数値scanInteger =(&文字列); 8。 9。 // 存在する場合、によって''ダウンの小数部分である 10 IF(* 文字列 == ' ' ) 11 { 12は ++ ストリング。 13は 14 // 理由||と、次の行: 15 @ 1つの小数整数部できない、0.123 0.123に等しく、例えば、のため; 16 // 2桁小数点以下のできない、233 233.0に等しく、例えば、 17 // 3.もちろん、小数点の前後には、デジタルであってもよく、例えば233.666 18で 数値scanUnsignedInteger =(&文字列)|| 数字; 19 } 20である 21れる // 次のインデックスに続く「E」または「E」は、番号の一部である場合 22で IF(* 文字列 == ' E ' || * 文字列 == ' E ' ) 23である { 24 ++ 文字列; 25 26は、 // 次の行を持つ理由&& 27 // ; E1ない番号がEまたはEによって先行されていない1、文字列全体が番号、例えば.e1によって表すことができない 28 // 2. Eあるいはない整数Eの後に、文字列全体は、12E、12E + 5.4などの数値で表現することができない 29 数値数値&& scanInteger =(&文字列); 30 } 31である 32 の戻り数値&& * ストリング == ' \ 0 ' ; 33である } 34れます 35 BOOL scanUnsignedInteger(チャー ** STR) 36 { 37 [ CONST 文字の前に* = * STR; 38は、 しばらく(!** STR = ' \ 0 ' && ** STR> = ' 0 ' && ** STR <= ' 9。' ) 39 ++(* STR); 40 41です // 、trueに戻り0-9いくつかのSTRのデジタル存在する場合 42は、 リターン *のSTR> 前に、 43である } 44で 45 // 整数形式は[+ | - ]とすることができるBが符号なし整数であるB、 46である BOOL scanInteger(チャー ** STR) 47 { 48 IF(STR == **' + ' || ** strの== ' - ' ) 49 ++(* STR); 50 リターンscanUnsignedInteger(STR)。 51 } 52 }。