库函数atoi()的实现

来源:互联网 发布:门禁一卡通软件设置 编辑:程序博客网 时间:2024/06/02 12:51

int atoi(const char *nptr);

如果第一个非空格字符存在,是数字或者正负号则开始做类型转换,之后检测到非数字(包括结束符 \0) 字符时停止转换,返回整形数。否则,返回零。

这里需注意:如果字符串是非法输入:字符串为空,只有一个‘+’或‘-’,非数字等返回的是整形数0;而如果输入是“0”,返回的也是整形数0。对于这样的情况,atoi()是通过一个全局变量来区分的。还有一点:比如输入是“123abc”,则atoi()也能正确执行,返回整形数123。

enum Status {kValid = 0, kInvalid};int g_nStatus = kValid;int StrToInt(const char* str){    g_nStatus = kInvalid;    long long num = 0;    if(str != NULL && *str != '\0')     {        bool minus = false;        if(*str == '+')            str ++;        else if(*str == '-')         {            str ++;            minus = true;        }        if(*str != '\0')         {            num = StrToIntCore(str, minus);        }    }    return (int)num;}long long StrToIntCore(const char* digits, bool minus){    long long num = 0;    const char *digit = digits;    while(*digit != '\0')     {        if(*digit >= '0' && *digit <= '9')         {            int flag = minus ? -1 : 1;            num = num * 10 + flag * (*digit - '0');            if((!minus && num > 0x7FFFFFFF)                 || (minus && num < (signed int)0x80000000))    //考虑是否溢出            {                num = 0;                break;            }            digit++;        }        else         {           // num = 0;            break;        }    }    if(*digit == '\0' || digit - digits > 0)     {        g_nStatus = kValid;    }    return num;}
参考《剑指offer》





0 0
原创粉丝点击