タイトル:文字列を整数に変換するには、ライブラリ関数を使用することができない要求は、整数、文字列を変換します。0の値または文字列が有効な戻り値ではありません0
nullにすることができ、英数字記号を含む文字列を入力します。
それはデジタル値の正当な表現が返されている場合は、それ以外の場合は0
オーバーフロー判断は困難です。
シンボルを分析します。
空の文字列。
// + - +だけで、最初に表示されることがない場合は- 、デフォルトは正の数であり、
数がない場合、//はまた、単に0を返します。
1 クラスソリューション{ 2 公共: 3 INT StrToInt(文字列strの){ 4 のintフラグ= 1 。 5 INT RES = 0 。 6 int型温度; 7 場合(str.length()== 0) // 空字符串 8 戻り 0 ; 9 もし(STR [ 0 ] == ' - ' ) 10 フラグ= - 1 。 11 のために(INT Iは= 0 ; I <str.length(); Iは++ ) 12である { 13は IF(STR [I] < ' 0 ' || STR [I]> [ 9。'){ // 非デジタル 14 IF(I == 0 &&(STR [I] == ' + ' || STR [I] == ' - ')){ // のみiが0 +又は=発生- 15 続行; 16 } 17 他{ 18が リターン 0 ; 19。 } 20は } 21が 他{ 22である // INT小数:-2 ^ 31 = -2147483648 2 ^ 31-1 = 2,147,483,647。10、21億の合計。 23は、 INT桁=(INT)(STR [I] - ' 0 ' ); 24 TEMP * = RES 10 + 桁; 25 // 注意も決定オーバーフローRESが10 *かどうか、再度判定するオーバーフローデジットプラスか 26 / / アップ<オーバーフロー決意INT32_MAX桁RESため* 10 + 27 IF(のフラグ== 1 INT32_MAX / &&(RES> 10 || RES * 10 > INT32_MAX- )用桁) 28 リターン 0; 29 // アンダーフロー決意のINT32_MIN> RES * 10 *のための桁- ( - 1) 30 IF - (のフラグ== 1 &&(*内のフラグRES <INT32_MIN / 10 || RES * 10 *のフラグ<+ INT32_MINのための桁)) 31、IS 戻り 0 ; 32の RES = TEMP; 33である } 34はある 35 } 36 リターンフラグ*はRES; 37 } 38です }。