1. 程式人生 > >atoi 和 itoa的實現

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;
}