atoi 和 itoa的實現


atoi 和 itoa是面試筆試經常要考到的題目,下面兩份代碼是用C語言實現的atoi和itoa:

1, atoi

原型: int atoi(const char *nptr);

函數說明: 參數nptr字符串,如果第一個非空格字符不存在或者不是數字也不是正負號則返回零,否則開始做類型轉換,之后檢測到非數字(包括結束符 \0) 字符時停止轉換,返回整型數。

#include <stdio.h> #include <assert.h>
static int atoi(const char* str) { int result = 0; int sign = 0; assert(str != NULL); // proc whitespace characters
    while (*str==' ' || *str=='\t' || *str=='\n') ++str; // proc sign character
    if (*str=='-') { sign = 1; ++str; } else if (*str=='+') { ++str; } // proc numbers
    while (*str>='0' && *str<='9') { result = result*10 + *str - '0'; ++str; } // return result
    if (sign==1) return -result; else
       return result; } 

2. itoa

char *itoaint value, char *string,int radix);

  原型說明:

  value欲轉換的數據。

  string:目標字符串的地址。

  radix:轉換后的進制數,可以是10進制、16進制等

char *itoa(int val, char *buf, unsigned radix) { char   *p; char   *firstdig; char temp; unsigned digval; p = buf; if(val <0) { *p++ = '-'; val = (unsigned long)(-(long)val); } firstdig = p; do{ digval = (unsigned)(val % radix); val /= radix; if  (digval > 9) *p++ = (char)(digval - 10 + 'a'); else
            *p++ = (char)(digval + '0'); }while(val > 0); *p-- = '\0 '; do{ temp = *p; *p = *firstdig; *firstdig = temp; --p; ++firstdig; }while(firstdig < p); return buf; }

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM