
先确定有效字符串的起点和终点,然后再依据有无符号、正负号来处理字符串。由于存在溢出的问题,可以用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; } }
文章来源: https://blog.csdn.net/Zolewit/article/details/89842642