每日一題——atoi,itoa函數的實現

atoi是將字符串轉換爲長整形數的一種函數,itoa相反
atoi實現需注意一下點:
1,空格;
2,表示數值的正負號;
3,結束條件:非數字或‘\0’;
4,考慮溢出問題;
5,考慮異常輸入問題(+abc …),用全局變量valid標識;

#define INT_MAX ((int)0x7FFFFFFF)
#define INT_MIN ((int)0x80000000)
bool valid = true;    //標識異常

int atoi(const char* str)
{
    if(str == NULL) return 0;

    bool minus = false;    //標識正負
    long long result = 0;

    while(*str == ' ') str++;

    if(*str == '-')
    {
        minus = true;
        str++;
    }
    else if(*str == '+')
        str++;
    if(*str < '0' || *str > '9')  return 0;
    valid = true;
    while(*str >= '0' && *str <= '9')
    {
        result = result*10 + *str-'0';
        if((minus && result > INT_MAX) || (!minus && result < INT_MIN))
        {
            valid = false;
            return 0;
        }
        str++;
    }

    if(minus)
        result*= -1;
    return (int)result;
}
char* Reverse(char* str)  
{
    char* begin = str;
    char* end = str;
    char* ret = begin;
    while (*end)
        end++;
    end--;
    while (begin < end)
    {
        char tmp = *begin;
        *begin = *end;
        *end = tmp;

        begin++;
        end--;
    }
    return ret;
}

char* my_itoa(int x)
{
    if (x == 0) return NULL;
    static char str[100];
    int isnegtive = 0;  //標註正負
    if (x < 0)
    {
        isnegtive = 1;
        x = -x;
    }

    int i = 0;
    while (x)
    {
        str[i++] = x % 10 + '0';
        x = x / 10;
    }
    if (isnegtive == 1)
        str[i++] = '-';
    str[i] = '\0';
    return Reverse(str);
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章