#include <iostream>
#include <string>
using namespace std;
class Solution {
public:
enum Status { kValid = 0, kInvalid };
int g_nStatus = kValid;
int StrToInt(string str) {
g_nStatus = kInvalid;
long long num = 0;
const char* cstr = str.c_str();
// 1.指针为NULL或空字符处理
if ((cstr == NULL) || (*cstr == '\0'))
{
return 0;
}
// 2.正负号处理
int minus = 1;
if (*cstr == '-')
{
minus = -1;
cstr++;
}
else if (*cstr == '+')
cstr++;
// 迭代字符串
while (*cstr != '\0')
{
// 3.非数字异常字符处理
if (*cstr < '0' || *cstr > '9')
{
g_nStatus = kInvalid;
num = 0;
break;
}
// 4.核心逻辑
g_nStatus = kValid;
num = num * 10 + (*cstr - '0');
cstr++;
// 5.数据溢出处理
if (((minus > 0) && (num > 0x7FFFFFFF)) ||
((minus < 0) && (num > 0x80000000)))
{
g_nStatus = kInvalid;
num = 0;
break;
}
}
// 5.后处理,增加正负号
if (g_nStatus == kValid)
num = num * minus;
return (int)num;
}
};
网友评论