atoi函式簡單實現

2puT發表於2016-07-10
1. 看一下atoi函式的要求,通過 man 3 atoi。

原型
#include
   int aoti(const char *str);

描述
    The atoi() function converts the initial portion of the string pointed to bystr to int representation.
     atoi函式把str字串初始有效部分轉換成int型別。

    因為atoi返回int,出錯返回-1是不可取的,因為-1也是有效的,返回0,同樣不可取。但是根據其描述,如果str完全無效那麼返回的應該是0,否則轉換其初始有效部分。
    知道了這些,基本就可以實現了。

點選(此處)摺疊或開啟

  1. #include
  2. int
  3. my_atoi(const char *str)
  4. {
  5.     int result;
  6.     char sign;

  7.     for (; str && isspace(*str); ++str)
  8.     ; /* 跳過空白,換行,tab*/  
  9.    
  10.     if (!str)
  11.        return 0;
  12.     sign = *str == '+' || *str == '-' ? *str++ : '+'; /* 處理符號 */

  13.     for (result = 0; str && isdigit(*str); ++str) /*轉換有效部分 */
  14.         result = result * 10 + *str - '0'; /* FIXME: 沒有考慮溢位 */
  15.     return (sign == '+' ? result : -result);
  16. }

標準庫實現是呼叫strol,然後呼叫strtoul。可以識別八進位制,十六進位制字元。

IMPLEMENTATION NOTES The atoi() function is not thread-safe and also not async-cancel safe. Theatoi() function has been deprecated bystrtol() and should not be used in new code.

相關文章