编程练习
题目:将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0
思路:算法的核心思想是利用字符串数组来挨个比较该字符的ASCII码是不是数字,不是数字就返回0,是数字还要区分是不是正数或者负数,分情况讨论0~9的ASCII码是48~57。Math.pow(m,n)方法用来计算m的n次方。
java代码如下:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60public class StrToInt {
/**
* 算法的核心思想是利用字符串数组来挨个比较该字符的ASCII码是不是数字,不是数字就返回0,是数字还要区分是不是正数或者负数,分情况讨论
* 0~9的ASCII码是48~57。Math.pow(m,n)方法用来计算m的n次方。
* @param str
* @return
*/
public static int StrToInt(String str) {
if(str==null ||str.trim().equals("")) {
return 0;
}
char [] arrs=str.toCharArray();
int sum=0;
//负数计算
if(arrs[0]=='-') {
int t=arrs.length-2;
for(int i=1;i<arrs.length;i++) {
if(arrs[i]>47 && arrs[i]<58) {
sum+=-1*(arrs[i]-48)*(Math.pow(10, t));
t--;
}else {
return 0;
}
}
return sum;
}
//有符号正数计算
if(arrs[0]=='+') {
int t=arrs.length-2;
for(int i=1;i<arrs.length;i++) {
if(arrs[i]>47 && arrs[i]<58) {
sum+=(arrs[i]-48)*(Math.pow(10, t));
t--;
}else {
return 0;
}
}
return sum;
}
//无符号正数计算
if(arrs[0]>47 && arrs[0]<58) {
int t=arrs.length-1;
for(int i=0;i<arrs.length;i++) {
if(arrs[i]>47 && arrs[i]<58) {
sum+=(arrs[i]-48)*(Math.pow(10, t));
t--;
}else {
return 0;
}
}
return sum;
}
return 0;
}
public static void main(String[] args) {
String s="-2147483648";
System.out.println(StrToInt(s));
}
}