先确定有效字符串的起点和终点,然后再依据有无符号、正负号来处理字符串。由于存在溢出的问题,可以用long long来装结果,一旦发现不在int的范围内就直接返回。
int myAtoi(string str) {
int start=0,i=0;
long long val=0;
if(str.empty())
return 0;
//先找起点
while(i<str.size() && str[i]==' ')
++i;
start=i;
//找终点
if(str[i]=='+' || str[i]=='-' || isdigit(str[i])){
++i;
while(i<str.size() && isdigit(str[i]))
++i;
}
else
return 0;
if(str[start]=='-'){
++start;
for(;start<i;++start){
val = val*10-(str[start]-'0');
if(val<=INT_MIN)
return INT_MIN;
}
return val;
}
else if(str[start]=='+'){
++start;
for(;start<i;++start){
val = val*10+(str[start]-'0');
if(val>=INT_MAX)
return INT_MAX;
}
return val;
}
else{
for(;start<i;++start){
val = val*10+(str[start]-'0');
if(val>=INT_MAX)
return INT_MAX;
}
return val;
}
}