1 指針是否爲空
2 字符串是否爲空字符串
3 字符串是否有正負號
4 字符串轉換的數字是否會整數溢出
5 設置全局變量,驗證返回0是因爲字符串爲“0”還是因爲錯誤輸入
enum { kValid, kInvalid };
int g_nStatus = kValid;
int StrToInt(const char* cstr )
{
long long num = 0;
// 判斷是否是空指針和空字符串""
if ((cstr != NULL) && (*cstr != '\0'))
{
// 處理符號位
int minus = 1;
if (*cstr == '-')
{
minus = -1;
cstr++;
}
else if (*cstr == '+')
{
minus = 1;
cstr++;
}
while (*cstr != '\0')
{
if (*cstr > '0' && *cstr < '9')
{
g_nStatus = kValid;
num = num * 10 + (*cstr - '0');
cstr++;
// 數據上下溢出
if (((minus > 0) && (num > 0x7FFFFFFF)) || ((minus < 0) && (num > 0x80000000)))
{
g_nStatus = kInvalid;
num = 0;
break;
}
}
else
{
g_nStatus = kInvalid;
num = 0;
break;
}
}
if (g_nStatus == kValid)
num = num * minus;
}
std::cout << (int)num << endl;
return (int)num;
}