算法不难,重点要注意的细节:
- 判断输入是否为空
- 如果字符串的第一个字符为 - ,最终得到的整数必为负整数
- 输入的字符中不能包含非数字的字符
- 输入的字符串不能太长,转成整数后会导致溢出
溢出的处理:
1.定义MaxInt和MinInt,n表示当前转化后的数,c表示当前要处理的数字,设置sign值来表示当前是正或负;
2.为正时,由两种情况:
a.如果n>MaxInt/10,return MaxInt;
b.如果n==MaxInt/10,如果c>MaxInt%10, return MaxInt;
基本算法如下:
static int MaxInt=(int)(~0>>1);
static int MinInt=-(int)(~0>>1)-1;
static void StringToInt(char[] input){
if (input.length==0){
// return 0;'
System.out.println("字符串为空!");
return;
}
int sign=0;
int n=0;
if (input[0]=='-'){
sign=-1;
}
if (sign<0){
for (int j=0;j<input.length-1;j++){
input[j]=input[j+1];
}
}
for (int i=0;i<input.length;i++){
while ((input[i]-'0')<9&&(input[i]-'0'>=0)){
int c=input[i]-'0';
if (sign>0&& n>(MaxInt/10)){
n=MaxInt;
break;
}else if (sign>0&&n==MaxInt&&c>(MaxInt%10)){
n=MaxInt;
break;
}else if (sign<0&&((n>MaxInt/10)||(n==MaxInt/10&&c>MaxInt%10))){
n=MinInt;
break;
}
n=n*10+c;
}
}
System.out.println(n);
// return sign>0?n:-n;}
另一个思路:
将字符串转成char数组后,将其中数字提取到int数组a中去,并将MaxInt转成int数组b,首先根据输入数组的长度判断是否超出MaxInt的长度,超过 则越界;a.length==b.length时,再从高位开始进行比较,if(a[i]>b[i]) 溢出;若a.length<b.length,明显不会溢出。