#include<iostream>
#include<limits> //整型变量最大最小值
using namespace std;
/* 说简单不简单的字符串转整数题
1、开头空白
2、正负号
3、非数字
4、超过int类型范围
5、'\0'结尾
*/
bool myatoi(const char *str,int *result)
{
if(!str) return 0;
bool positive=true;
while(*str==' ') str++;
if(*str=='-')
{
positive=false;
str++;
}
else if(*str=='+')
{
str++;
}
double sum=0;
int digits=0;
while(*str!='\0'&&*str>='0'&&*str<='9')
{
sum = sum*10 + *str++-'0';
if(positive&&sum>INT_MAX||(!positive&&(0-sum)<INT_MIN)) return 0; //超出范围
digits++;
}
if(digits==0) return 0; //没有数字
else
{
*result = positive ? (int(sum)):(int(0-sum));
return 1;
}
}
void main()
{
int num;
if(myatoi(" 123",&num)==0)
cout<<"error"<<endl;
else
cout<<num<<endl;
if(myatoi(" +1ab",&num)==0)
cout<<"error"<<endl;
else
cout<<num<<endl;
if(myatoi(" +11111111111111111111111111",&num)==0)
cout<<"error"<<endl;
else
cout<<num<<endl;
if(myatoi(" 0",&num)==0)
cout<<"error"<<endl;
else
cout<<num<<endl;
}