解法一
存在long
//使用long
class Solution {
public:
int strToInt(string str) {
int i = 0, flag = 1;//默认flag为正数
long res = 0;
while(str[i]==' ') i++;
if(str[i] == '-') flag = -1;
if(str[i] == '-' || str[i] == '+' ) i++;
for (; i < str.size() && isdigit(str[i]); i++)
{
res = res*10 +str[i]-'0';
if(res>INT_MAX && flag==1) return INT_MAX;
if(res>INT_MAX && flag==-1) return INT_MIN;
}
return flag*res;
}
};
解法二
没有long,需要有边界界定
class Solution {
public:
int strToInt(string str) {
int i = 0, flag = 1;//默认flag为正数
int res = 0;
while (str[i] == ' ') i++;
if(str[i] == '-') flag = -1;
if(str[i] == '-' || str[i] == '+') i++;
for (; i < str.size()&&isdigit(str[i]); i++)
{
if(res>INT_MAX/10 || (res==INT_MAX/10 && str[i]-'0'>7))//溢出判定
return flag==1?INT_MAX:INT_MIN;
res = res*10+(str[i]-'0');
}
return flag*res;
}
};