2016-05-09 65 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

是的,有辦法,但你應該發佈到Code Review網站,因爲它是一個工作功能。 –

+0

從避免_magic numbers_開始! – Olaf

回答

2

它可以像這樣從根本上簡化。你只需要解析一次字符串,並保持一個值。這是針對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