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

/****************************************************************************************
 *题目:实现吧字符串转化为数字
 *时间: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));
	}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值