#include <iostream>
using namespace std;
enum Status{
kValid,kInValid
};
int g_nStatus = kValid;
int StrToInt(const char *str)
{
g_nStatus = kInValid;
long long num = 0;
bool minus = false;
int flag = 1;
if(str !=NULL && *str != '\0'){ //空指针和空字符串
if(*str == '+')
str++;
else if(*str == '-'){
str++; flag = -1;
minus = true;
}
if(*str != '\0'){ //排除只有一个'+'或'-'的情况
while(*str != '\0'){
if(*str>='0' && *str<='9'){
num = num*10 + flag*(*str-'0');
if(!minus && num>0x7FFFFFFF ||(minus && num<(int)0x80000000)){ //判断数值是否越界
num = 0;
break;
}
str++;
}else{
num = 0; break;
}
}
if(*str == '\0')
g_nStatus = kValid;
}
}
return (int)num;
}
int main()
{
cout<<"State = "<<g_nStatus<<",\tResult = "<<StrToInt(NULL)<<endl;
cout<<"State = "<<g_nStatus<<",\tResult = "<<StrToInt("")<<endl;
cout<<"State = "<<g_nStatus<<",\tResult = "<<StrToInt("+")<<endl;
cout<<"State = "<<g_nStatus<<",\tResult = "<<StrToInt("-")<<endl;
cout<<"State = "<<g_nStatus<<",\tResult = "<<StrToInt("+0")<<endl;
cout<<"State = "<<g_nStatus<<",\tResult = "<<StrToInt("+1")<<endl;
cout<<"State = "<<g_nStatus<<",\tResult = "<<StrToInt("-1")<<endl;
cout<<"State = "<<g_nStatus<<",\tResult = "<<StrToInt("2147483647")<<endl;
cout<<"State = "<<g_nStatus<<",\tResult = "<<StrToInt("2147483648")<<endl;
cout<<"State = "<<g_nStatus<<",\tResult = "<<StrToInt("-2147483648")<<endl;
cout<<"State = "<<g_nStatus<<",\tResult = "<<StrToInt("-2147483649")<<endl;
return 0;
}
输出结果如下所示,其中State为0表示正常高输出,为1表示输入字符串非法。
State = 1, Result = 0
State = 1, Result = 0
State = 1, Result = 0
State = 1, Result = 0
State = 0, Result = 0
State = 0, Result = 1
State = 0, Result = -1
State = 0, Result = 2147483647
State = 1, Result = 0
State = 0, Result = -2147483648
State = 1, Result = 0