zoukankan      html  css  js  c++  java
  • 库函数atoi()的实现

    int atoi(const char *nptr);

    假设第一个非空格字符存在,是数字或者正负号则開始做类型转换,之后检測到非数字(包含结束符 ) 字符时停止转换。返回整形数。

    否则,返回零。

    这里需注意:假设字符串是非法输入:字符串为空,仅仅有一个‘+’或‘-’。非数字等返回的是整形数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 != '') 
        {
            bool minus = false;
            if(*str == '+')
                str ++;
            else if(*str == '-') 
            {
                str ++;
                minus = true;
            }
    
            if(*str != '') 
            {
                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 != '') 
        {
            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 == '' || digit - digits > 0) 
        {
            g_nStatus = kValid;
        }
    
        return num;
    }
    參考《剑指offer》

    
    



  • 相关阅读:
    webpack to package typescript & scss
    start use webpack
    use selenium+chromedriver to taobao automatically
    Use Hexo to Build My Gitee Blog
    Promise调用方式
    导航守卫用法
    VueCli路由配置
    webpack安装vue-loader
    webpack用npm进行局部安装
    JavaScript里的语句用分号结尾是个选项吗
  • 原文地址:https://www.cnblogs.com/mengfanrong/p/5061418.html
Copyright © 2011-2022 走看看