您的位置:首页 > Web前端

【笔试】55、实现吧字符串转化为数字(C的atoi函数)

2015-10-06 21:38 399 查看
/****************************************************************************************
*题目:实现吧字符串转化为数字
*时间: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));
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息