首页 > 代码库 > leetcode:atoi

leetcode:atoi

转换原则:忽略前导空格,从+-或数字开始转换,中间出现非数字break,注意判断乘法加法溢出,大于INT_MAX输出INT_MAX,小于INT_MIN输出INT_MIN

int atoi(const char *str) {    if (str==NULL)    {        return 0;    }    int ans=0,pos=1,pre;    while (*str== || *str==\t) ++str;    if (*str==-){        pos=-1;        ++str;    }    else if (*str==+)    {        pos=1;        ++str;    }    if (!isdigit(*str))        return 0;    ans=(*str-0)*pos;    ++str;        for (;*str!=\0;++str){        if (isdigit(*str)){            pre=ans;            if (pos==1&&pre>INT_MAX/10){                ans=INT_MAX;                break;            }            if (pos==-1&&pre<INT_MIN/10){                ans=INT_MIN;                break;            }            pre=ans*10;            ans=ans*10+(*str-0)*pos;             if (pos==1&&ans<pre){                ans=INT_MAX;                break;            }            if (pos==-1&&ans>pre){                ans=INT_MIN;                break;            }        }        else break;    }        return ans;}

leetcode:atoi