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