zoukankan      html  css  js  c++  java
  • 把字符串转换成整数

    linux 中库函数有个atoi(),但当atoi(0x0)会直接崩溃,咱们也可以实现类型的功能。

    一、题目

    请你写一个函数StrToInt,实现把字符串转换成整数这个功能。当然,不能使用atoi或者其他类似的库函数。

    二、详细代码

    long long StrToIntCore(const char* str, bool minus);
    
    /* 非法输入,则返回0并把这个全局变量g_nStatus设为一个特殊标记。
     * 如果输入是“0”,则返回0,不会设置全局变量。
     */
    enum Status {kValid = 0, kInvalid};
    int g_nStatus = kValid;
    
    int StrToInt(const char* str)
    {
        g_nStatus = kInvalid;
        long long num = 0;
    
        if(str != nullptr && *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* digit, bool minus)
    {
        long long num = 0;
    
        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 == '') 
            g_nStatus = kValid;
    
        return num;
    }
    
    
    
    作者:yusq77

    -------------------------------------------

    Wish you all the best and good health in 2021.

  • 相关阅读:
    DirectX9:基础篇 第五章 绘制流水线
    他山之石:可以攻玉
    C89:论内存分配问题
    C89:关键字
    MFC:开头篇 介绍
    DirectX9:先导篇 数学基础
    模仿轮播图效果
    text选中后displa出label内容
    ASP.NET页面之间传递值的几种方式
    jquery-delay(),queue()
  • 原文地址:https://www.cnblogs.com/yusq77/p/13546521.html
Copyright © 2011-2022 走看看