天天看點

模拟itoa和atoi

模拟實作atoi

函數原型:

int atoi ( const char * str );
           

傳入一個char*,傳回值為int

int my_atoi(const char* str)
{
    assert(str);
    int num = ;
    int flag = ;
    //跳過空白字元
    while (*str == ' ' || *str == '\t' || *str == '\n')
        str++;

    //判斷轉換後數字的正負
    flag = (*str == '-') ? - : ;

    //如果有輸入符号,則要将此符号跳過
    if (*str == '-' || *str == '+')
        str++;

    //每一位數字轉為數字
    while (*str >= '0' && *str <= '9')
    {
        num = num *  + (*str - '0');
        str++;
    }

    return num*flag;
}
           

模拟實作itoa

函數原型:

char* itoa(int value,char* str,int radix)
           

int轉為char*。

value為int的值。

str為最後字元串儲存的地方。

radix為轉為X進制的字元。

char* my_itoa(int value,char* str,int radix)
{
    char* firstdig;
    char* p = str;
    unsigned int digval;

    if (value < )
    {
        *p++ = '-';
        value = -value;
    }

    firstdig = p;
    //這時存到p中(也就是str)的數字為反的
    do 
    {
        //數字一定是無符号整型,并且數字為對進制位取得餘數。
        digval = value%radix;
        value /= radix;

        if (digval > )
            *p = (char)(digval -  + 'a');
        else
            *p = (char)(digval + '0');
        p++;
    } while (value>);


    //這裡需要翻轉一下
    //先把末尾置為\0結束符
    *p-- = '\0';

    while (firstdig < p)
    {
        char temp = *p;
        *p = *firstdig;
        *firstdig = temp;
        firstdig++;
        p--;
    }

    return str;
}
           

繼續閱讀