1. 程式人生 > >模擬itoa和atoi

模擬itoa和atoi

模擬實現atoi

函式原型:

int atoi ( const char * str );

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

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

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

    //如果有輸入符號,則要將此符號跳過
if (*str == '-' || *str == '+') str++; //每一位數字轉為數字 while (*str >= '0' && *str <= '9') { num = num * 10 + (*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 < 0)
    {
        *p++ = '-';
        value = -value;
    }

    firstdig = p;
    //這時存到p中(也就是str)的數字為反的
    do 
    {
        //數字一定是無符號整型,並且數字為對進位制位取得餘數。
        digval = value
%radix; value /= radix; if (digval > 9) *p = (char)(digval - 10 + 'a'); else *p = (char)(digval + '0'); p++; } while (value>0); //這裡需要翻轉一下 //先把末尾置為\0結束符 *p-- = '\0'; while (firstdig < p) { char temp = *p; *p = *firstdig; *firstdig = temp; firstdig++; p--; } return str; }