實現c++函數庫中atoi()函數,要考慮到各種特殊情況:
轉換過程並不復雜,復雜的是要考慮到眾多特殊情況。
int myAtoi(string str) {
if(str.length() == 0) return 0; //空串
bool isNeg = false;
long re = 0;
int i=0,cnt;
for(;i= '0' && str[i] <= '9')
re = str[i] - '0',cnt=1; //記錄數字的位數
else return 0;
i++;
for(; i < str.length(); i++)
{
if (cnt > 10) break; //大於整數所表示的最大位數,跳出循環
if(str[i] < '0' || str[i] > '9') break;
re = re*10 + (str[i] - '0'),cnt++;
}
//溢出判斷
if(re > INT_MAX && !isNeg) return INT_MAX;
else if(isNeg &&re*(-1) < INT_MIN) return INT_MIN;
return isNeg?re*(-1):re;
}