剑指offer49:字符串转化为整数

来源:互联网 发布:房源群发软件 编辑:程序博客网 时间:2024/05/29 16:28

字符串转化为整数:各种陷阱

题目简介

题目本身不难,但需要考虑的非法输入比较多,所以还是值得学习一下,用来应付各种比较“严格的”面试。
int StrToInt(const char* str);

考虑因素:
1. str指针是否为空,str是否为空串
2. 正负号输入
3. 整数溢出

(若还有其他考虑,还请赐教。)

编写代码

bool g_invalid_input_49 = false;int q49_StrToInt(const char* str) {    if (nullptr == str || '\0' == *str) {        g_invalid_input_49 = true;        return 0;    }    bool is_positive = true;    const char *p = str;    if ('+' == *p) {        ++p;    } else if ('-' == *p){        is_positive = false;        ++p;    }    return q49_StrToInt_Core(p, is_positive);}int q49_StrToInt_Core(const char* p, bool is_positive) {    int ret = 0;    while ('\0' != *p) {        if (*p >= '0' && *p <= '9') {            ret = ret * 10 + *p - '0';            //判断是否溢出:分别判断上溢和下溢            if ((is_positive && ret > 0x7FFFFFFF) ||                (!is_positive && ret < (signed int)0x80000000)) {                   g_invalid_input_49 = true;                ret = 0;                break;            }            ++p;        } else {            g_invalid_input_49 = true;            ret = 0;            break;        }    }    if (!is_positive) {        ret = -ret;    }    return ret;}

总结

如果简单些转换可能大家都会,但真正能这样写出来,说实在的,确实不容易。准确的说,现在的我,面试的时候肯定做不到。只有多积累了。

0 0
原创粉丝点击