下面是代码。
class Solution {
public:
int strToInt(string str) {
if(str.size() == 0){ //如果字符串为空,直接返回。
return 0;
}
long int res = 0;//用来保存返回值。一定要位long int,可能16位的int不会编译通过。
int flag = 0; //这个flag用来标记有没有符号位。没有0,+:1,-:2.
int i = 0; //这个指针用来记录第一个非空位置。
//得到第一个非空的字符的位置。
while(str[i] == ' ')
i++;
//判断第一个非空字符是不是符号位。
if(str[i] == '+') flag = 1;
if(str[i] == '-') flag = 2;
//得到第一个数字的位置。也就是符号位之后的那个数字。
int start = flag > 0? (i+1): i;
//进行遍历。
while(start < str.size()){
//如果当前的不是数字,后面的也不再循环。
if(str[start] > '9' || str[start] < '0'){
break;
}
//累加得到的结果。用str[str] - '0'将字符更改为数字。
res = res*10 + str[start] - '0';
start ++ ;
}
//为了判断最后是不是超过了表示范围。再次保存一个临时结果变量。
long int res2 = flag>1?-res:res;
//判断结果。如果没有受限,则返回res2.
if(res2 > INT_MAX) return INT_MAX;
if(res2 < INT_MIN) return INT_MIN;
return res2;
}
};