/****************************************************************************************
*题目:实现吧字符串转化为数字
*时间:2015年10月6日21:08:13
*文件:StringToInt.java
*作者:cutter_point
****************************************************************************************/
package bishi.Offer50.y2015.m10.d06;
import org.junit.Test;
public class StringToInt
{
private int g_nStatus = Status.kValid.getValue();
private enum Status
{
//定义构造函数传参数
kValid(0), kInvalid(1);
//定义变量
private int value;
//构造函数
private Status(int _value)
{
this.value = _value;
}
public int getValue()
{
return value;
}
public void setValue(int value)
{
this.value = value;
}
}
private long strToIntCore(char digit[], boolean minus)
{
long num = 0; int index = 1;
while(index != digit.length)
{
//要求要在我们的数字范围内
if(digit[index] >= '0' && digit[index] <= '9')
{
int flag = minus ? -1 : 1; //用minus来确定正负
num = num * 10 + flag * (digit[index] - '0'); //累加
if(!minus && num > Integer.MAX_VALUE || minus && num < Integer.MIN_VALUE)
{
//防止堆栈溢出,我们转化的是int型的,但是我们在这里用long来判断堆栈的溢出
num = 0;
break;
}//if
++index;
}//if
else
{
num = 0;
break;
}//else
}//while
if(index == digit.length)
{
//转化成功
this.g_nStatus = Status.kValid.getValue();
}//if
return num;
}
public int strToInt(String str)
{
this.g_nStatus = Status.kInvalid.getValue();
long num = 0;
if(str != null && str != "")
{
char strc[] = str.toCharArray();
boolean minus = false; //默认是正数
int index = 0; //下标
if(strc[index] == '+')
{
++index;
}//if
else if(strc[index] == '-')
{
++index;
//负数
minus = true;
}//else if
num = strToIntCore(strc, minus);
}//if
return (int)num;
}
@Test
public void test()
{
StringToInt s = new StringToInt();
String x = "-9845";
System.out.println(s.strToInt(x));
System.out.println(5 + s.strToInt(x));
}
}
【笔试】55、实现吧字符串转化为数字(C的atoi函数)
最新推荐文章于 2020-05-14 11:41:03 发布