剑指offer系列53---字符串转化成整数

【题目】将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数
* 【】整数(32位)最大值:0X7fff ffff( 0111 1111 1111 1111 1111 1111 1111 1111 (0代表正号))
* 最小值:0x8000 0000( 1000 0000 0000 0000 0000 0000 0000 0000 (1代表负号))

 package com.exe10.offer;

 /**
* 【题目】将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数
* 【】整数(32位)最大值:0X7fff ffff( 0111 1111 1111 1111 1111 1111 1111 1111 (0代表正号))
* 最小值:0x8000 0000( 1000 0000 0000 0000 0000 0000 0000 0000 (1代表负号))
* @author WGS
*
*/
public class StrToInt {
boolean isValid=true;//定义个全局变量表示发生溢出 public int strToInt(String str){
if(str==null) return -1;
long sum=0;
int begin=0;//起始字符
boolean minus=false;//默认为正号
if(str!=null && !str.equals("")){
char firstChar=str.charAt(begin);
if(firstChar=='+'){
begin++;
}else if(firstChar=='-'){
begin++;
minus=true;//为负数
}
sum=strToInt(str,minus,begin);
}else{
//非法输入:当输入为"" 的时候
isValid=false;
}
//System.out.println(isValid);
return (int)sum; } private long strToInt(String str, boolean minus, int begin) {
int flag=minus?-1:1;
long sum=0;
int index=begin; while(index<str.length()){ char curChar=str.charAt(index);
if(curChar>='0' && curChar<='9'){
sum=sum*10+flag*(curChar-'0'); //假如越界的话
if((minus && sum<Integer.MIN_VALUE) || //MIN_VALUE==0x80000000
(!minus &&sum>Integer.MAX_VALUE ))//MAX_VALUE = 0x7fffffff;
return 0;
}else{
return 0;//字符串中只要出现不是0-9字符即返回0
}
index++;
}
return sum;
} public static void main(String[] args) {
StrToInt s=new StrToInt();
int num=s.strToInt("");
System.out.println(num); } }
上一篇:Extending Robolectric


下一篇:图解——VS发布网站详细步骤