首页 > 代码库 > 将字符串转换成数字

将字符串转换成数字

问题描述:

Implement atoi to convert a string to an integer.

解题思路:

对于一个字符串需要注意一下几点:

1、过滤字符串开头的所有空格字符;

2、注意数字字符前面的“+”和“-”字符,从而确定数字的正负号;

3、只处理数字字符,一旦出现非数字字符,立即停止字符串处理,并返回已处理的结果;

4、返回结果时要注意数字越界的问题,不能大于最大值,不能小于最小值。

class Solution {
public:
    int atoi(const char *str) {
        if (str == NULL)
            return 0;
        const char *pCur = str;
        long long  result = 0;
        int flag = 0;/*表示该数是否为负值*/
        while (*pCur == ' ' && *pCur != '\0')
            pCur++;
        if (*pCur == '\0') /*字符串中只有空格*/
            return 0;
        if (*pCur == '+')/*处理字符串前面的符号*/
            pCur++;
        else if (*pCur == '-') {
            flag = 1;
            pCur++;
        }
        if (*pCur > '9' || *pCur < '0')/*加减号后面为非法字符,跳出处理*/
            return 0;
        if (*pCur != '\0')
            result = _atoi_core(pCur, flag);
        return (int)result;
    }
    long long _atoi_core(const char * pCur, int flag) {
        long long result;
        while (*pCur != '\0') {
            if (*pCur >= '0' && *pCur <= '9') {
                result = result*10 + *pCur - 48;
                pCur++;
            } 
            else /*遇到非法字符,跳出处理*/
                break;
        }
        if (result > 0x7FFFFFFF) {
            if (flag)
                return INT_MIN;
            else
                return INT_MAX;
        }
        if (flag)
            result = 0 - result;
        return result;
    }
};