将一个字符串转换为整数

#include<iostream>
using namespace std;

enum InputStatus{kValid=0,kInvalid};
int InStatus = kValid;
int StrToInt(char* str) {
    InStatus = kInvalid;
    long long num = 0;
    if(str != NULL&&*str!='0') {//特殊处理,保证指针不为空
        const char *digit = str;//用中间变量,保护原来的值不受破坏
        bool ValueFlag = false;

        //特殊处理第一个字符,第一个字符可能是'+',也可能是'-',可能没有符号,那就执行下面的while循环
        if (*digit == '+') {
            digit++;
        }
        else {
            if (*digit == '-') {
                ValueFlag = true;
                digit++;
            }
        }

        //第一个字符有'+'或'-'表示,则下面的代码是第二个字符之后的处理
        //若第一个字符没有符号表示,则下面的代码直接从第一个字符开始
        while (*digit!= '\0') {//特殊处理,保证字符串不为空,若为空,不执行接下来的代码

            if (*digit >= '0'&&*digit <= '9') {
                num = num * 10 + *digit - '0';
                if ((ValueFlag==false && num >numeric_limits<int>::max())|| (ValueFlag==true && num >numeric_limits<int>::min()+1))//溢出处理
                {
                    num = 0;
                    break;
                }
                digit++;
            }
            else {//非法字符处理,不再转换
                num = 0;
                break;
            }
        }
        if (*digit == '\0') {//字符串结束时
            InStatus = kValid;  
            if (ValueFlag)
                num = 0 - num;          
        }   
        return (int)num;
}   
}

int main() {
    char *string="-2345";//可以自设测试用例
    int value = StrToInt(string);
    cout << value << endl;
    system("pause");
    return 0;
}