把字符串转换成整数
题目描述
将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0
输入描述:
输入一个字符串,包括数字字母符号,可以为空
输出描述:
如果是合法的数值表达则返回该数字,否则返回0
实现思路
做这个题目做的真的很烦,最麻烦的就是判断当前是否越界。可存储的最大的正数末位为7,可存储的最小的负数末位为8,因此每向下遍历一次对当前和*10之前要判断是否越界。
- 对当前和取绝对值,若-INT_MAX/10大于0的话则不会越界,小于0则肯定越界。
- 若==0的话,如果该数字是正数,若当前字符串元素大于7则越界;如果该数字是负数,若当前字符串元素大于8则越界。
具体实现
class Solution {
public:
int StrToInt(string str) {
int res;
int sz = str.size();
int isNegtive=1;
int overValue;
int i=0;
if(sz==0){
return 0;
}
if(str[0]=='+'){
isNegtive=1;
i=1;
}
else if(str[0]=='-'){
isNegtive=-1;
i=1;
}
int sum=0;
for( ;i<sz;i++){
if('9'<str[i]||str[i]<'0')
return 0;
int digit = str[i]-'0';
overValue = isNegtive*sum - INT_MAX/10
+ (((isNegtive+1)/2+digit)>8?1:0);
if(overValue>0) return 0;
sum = sum*10 + isNegtive*digit;
}
return sum;
}
};