版权声明:转载请联系 :[email protected] https://blog.csdn.net/weixin_40928253/article/details/85257414
将字符串转换成整数
题目描述:
将一个字符串转换成一个整数(实现Integer.valueOf(string)的功能,但是string不符合数字要求时返回0),要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0。
输入描述:
输入一个字符串,包括数字字母符号,可以为空
输出描述:
如果是合法的数值表达则返回该数字,否则返回0
示例1
输入
+2147483647
1a33
输出
2147483647
0
解题思路:
边界条件:
数据上下 溢出
空字符串
只有正负号
有无正负号
错误标志输出
public class Solution {
public static boolean flag;
public static int StrToInt(String str) {
flag = false;
//判断输入是否合法
if (str == null || str.trim().equals("")) {
flag = true;
return 0;
}
// symbol=0,说明该数为正数;symbol=1,该数为负数;start用来区分第一位是否为符号位
int symbol = 0;
int start = 0;
char[] chars = str.trim().toCharArray();
if (chars[0] == '+') {
start = 1;
}else if (chars[0] == '-') {
start = 1;
symbol = 1;
}
int result = 0;
for (int i = start; i < chars.length; i++) {
if (chars[i] > '9' || chars[i] < '0') {
flag = true;
return 0;
}
int sum= result * 10 + (int) (chars[i] - '0');
if((sum-(int) (chars[i] - '0'))/10!=result){
flag=true;
return 0;
}
result=result * 10 + (int) (chars[i] - '0');
}
// 注意:java中-1的n次方不能用:(-1)^n .'^'异或运算
// 注意,当value=-2147483648时,value=-value
result = (int) Math.pow(-1, symbol) * result;
return result;
}
}
public class Solution {
public int StrToInt(String str) {
if (str.equals("") || str.length() == 0)
return 0;
char[] a = str.toCharArray();
int fuhao = 0;
if (a[0] == '-')
fuhao = 1;
int sum = 0;
for (int i = fuhao; i < a.length; i++) {
if (a[i] == '+')
continue;
if (a[i] < '0' || a[i] > '9') //48代表‘0’,57代表‘9’
return 0;
sum = (sum<<1)+(sum<<3) + (a[i] & 0xf); //sum = sum * 10 + a[i] - 48; sum = (sum<<1)+(sum<<3) + (a[i] & 0xf); sum*10=sum*(2^1+2^3)
}
return fuhao == 0 ? sum : sum * -1;
}
}