问题描述:
将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0
源码:
用overValue = isNegtive*value - INT_MAX/10 + (((isNegtive+1)/2 + digit > 8) ? 1:0); 判断加上当前的位后是否有溢出,注意int的范围是-2147483648到2147483647。正数要注意7,负数要注意8。
class Solution {
public:
int StrToInt(string str) {
const int length = str.length();
int isNegtive = 1, overValue = 0;
int digit = 0, value = 0;
if (length == 0) return 0;
else {
int idx = 0;
if (str[0] == '-') { isNegtive = -1; idx = 1;}
else if (str[0] == '+') {idx = 1;}
for (; idx<length; idx++) {
digit = str[idx]-'0';
// overValue表示本轮循环是否会越界
overValue = isNegtive*value - INT_MAX/10
+ (((isNegtive+1)/2 + digit > 8) ? 1:0);
if (digit<0 || digit>9) return 0;
else if (overValue > 0) return 0;
value = value*10 + isNegtive*digit;
}
return value;
}
}
};