2016-05-09 5 views
-1
int myAtoi2(char *str) 
    { 
     int number = 0; 
     char *ptr = str; 

     if (*ptr == '-') { 
      number = number - (*++ptr - '0'); 
      ptr++; 
     } 

     while (isdigit (*(ptr))){ 
      if (number < 0) { 
      number = number * 10 - (*ptr++ - '0'); 
      } 
      else 
      number = number * 10 + (*ptr++ - '0'); 
     } 

     return number; 
    } 

自分でatoiを改善する方法はありますか?私自身のatoiを最適化する

+3

は、なぜあなたは負の数を処理していない場合は 'int'を返す機能しませんか? – EOF

+2

はい、方法はありますが、実際に機能しているので、コードレビューサイトに投稿する必要があります。 –

+0

_magic numbers_を避けて始めましょう! – Olaf

答えて

2

このように根本的に単純化することができます。文字列を1回解析するだけで、1つの値を保持する必要があります。これはunsigned値です。負の数値と範囲のチェックが必要な場合は、コードにもう少し追加されます。

#include <stdio.h> 
#include <ctype.h> 

unsigned myOwnAtoi(char *str) 
{ 
    unsigned number = 0; 
    char *ptr = str; 
    while(isdigit(*ptr)) { 
     number = number * 10 + *ptr++ - '0'; 
    } 
    return number; 
} 

int main(void) 
{ 
    printf("%u\n", myOwnAtoi("123456")); 
    return 0; 
} 

プログラムの出力:

123456 
関連する問題