题目:写一个函数,实现把字符串转换成整数这个功能。不能使用atoi或者其他类似的库函数。

分析:题目不难,但是考虑的问题较多,例如字符串为NULL,字符串为“”,以及合法字符有哪些('0'~'9'和‘+’、'-'),正负数问题,以及字符串中只有正负号情况,转换成的整数是否溢出等等问题。

实现:

enum Status(kValid=0,kInvalid);
int g_nStatus=kVaild;

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;
}