码迷,mamicode.com
首页 > 其他好文 > 详细

剑指offer (49) 字符串转数字

时间:2014-07-07 23:45:23      阅读:196      评论:0      收藏:0      [点我收藏+]

标签:style   blog   color   问题   div   amp   

class Test {
    public:
        Test() : n2(0), n1(n2 + 2) { }
    private:
        int n1;
        int n2;
};

调用构造函数之后,n1个n2各为多少?

分析:构造函数的初始化顺序仅仅取决于成员变量的声明顺序,所以这是 应该是 n1先初始化,然后是n2初始化

当n1初始化值 = n2值 + 2,此时n2并没有初始化,n2为内置类型并且是non-static,所以n2此时为随机值

故 n1 为随机值,n1初始完之后,n2初始化为0

最终 n1为随机值,n2为0

 

字符串转为数字:

需要考虑以下几点:

1. 输入字符串指针为NULL,如果输入为NULL,则返回0,而输入为‘0‘时也返回0,所以应该设置一个全局变量来区分

2. 输入为空字符串

3. 正负号,并且字符串只有一个负号的问题: ‘-‘

4. 字符不是介于 ‘0‘ 至 ‘9‘ 之间

5. 溢出判断

long long StrToIntCore(const char* str, bool minus);

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* digit, bool minus)
{
    long long num = 0;

    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) 
    {
        g_nStatus = kValid;
    }

    return num;
}

 

剑指offer (49) 字符串转数字,布布扣,bubuko.com

剑指offer (49) 字符串转数字

标签:style   blog   color   问题   div   amp   

原文地址:http://www.cnblogs.com/wwwjieo0/p/3812721.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!