1.将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。数值为0或者字符串不是一个合法的数值则返回0.
输入描述:
输入一个字符串,包括数字字母符号,可以为空
输出描述:
如果是合法的数值表达则返回该数字,否则返回0.

class Solution {
public:
    enum Status{kValid=0,kInvalid};//判断是否是合法输入
    int g_nStatus=kValid;
    int StrToInt(string str) {
        g_nStatus=kInvalid;
        long long num=0;
        if(str.length()==0) return 0;//空字符串
        int i=0;
        if(str[i]!='\0')
        {
            bool minus=false;//加减号判断
            if(str[i]=='+')
            {
                i++;
            }
            else if(str[i]=='-')
            {
                i++;
                minus=true;
            }//第一个位置是加减号,记录一下
            if(str[i]!='\0')
            {
                while(str[i]!='\0')
                {
                    if(str[i]>='0'&&str[i]<='9')
                    {
                        int flag=minus?-1:1;
                        num=num*10+flag*(str[i]-'0');
                        if((!minus&&num>0x7FFFFFFF)||(minus&&num<(signed int)0x80000000))
                        {
                            num=0;
                            break;
                        }//如果大于最大正数,小于最小负数,就返回0
                        i++;
                    }
                    else
                    {
                        num=0;
                        break;//字母等非法输入
                    }
                }
                if(str[i]=='\0')
                {
                    g_nStatus=kValid;//只有成功运行到最后一个字符,才置标识符为合法
                }
            }
        }
        return num;
    }
};