题目描述
将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0
输入描述:
输入一个字符串,包括数字字母符号,可以为空
输出描述:
如果是合法的数值表达则返回该数字,否则返回0
示例1
输入
+2147483647 1a33
输出
2147483647 0
解题思路:
1、首先考虑字符串是否有正负号
2、其次需要考虑每个字符是否都是数字
3、最后要判断最后得到的结果是否超出int的取值范围
代码实现:
class Solution {
/*
1、首先考虑字符串是否有正负号
2、其次需要考虑每个字符是否都是数字
3、最后要判断最后得到的结果是否超出int的取值范围
*/
public:
int StrToInt(string str) {
long ans = 0;//long类型,避免溢出。不能用int
int i=0;
if(str[0] == '-' || str[0] == '+'){//首位如果是正负标志位,不参与运算
i++;
}
for(;i<str.size();i++){
if(str[i]>='0' && str[i] <= '9'){
ans = ans *10 + (int)(str[i] - '0');
}else{//存在非数字
return 0;
}
}
if(str[0] == '-'){//整数为负数
ans = -ans;
}
//int范围为[-2147483648,2147483647]
if(ans > INT_MAX || ans < INT_MIN){//判断是否溢出
return 0;
}
return ans;
}
};