String to Integer (atoi)问题

3 篇文章 0 订阅
2 篇文章 0 订阅

         将字符串转换成整形的题目。题目要求就一句话:Implement atoi to convert a string to an integer. 所以这道题的重点是要求中隐藏的种种条件——让程序可以正常运行。所以要考虑很多特殊的输入情况。

       1.输入的字符串有空字符的情况

       2.开头有加号或者减号的情况,要正常输出。

       3.字符串中的数字中夹杂的字母或者其他字符的情况,可以正常输出前面的而忽略掉后面的。

       4.假如完全是特殊字符,或者在第一个有效整数之前都是特殊字符的话就不进行转换,返回0。

       5.如果转换出来的数字超过整型的最大值和最小值,超过最大值的返回最大值,小于最小值的返回最小值。

     以上大概5种特殊情况。因为比较头疼这种特殊情况处理型的代码,所以参考别人的部分很多。以下java代码:

public class Solution {
	 public int myAtoi(String str) {
	        int max = Integer.MAX_VALUE;     //定义整型最大值
	        int min = -Integer.MIN_VALUE;    //定义整形最小值
	        str = str.trim();               //去掉字符串中的空格
	        long result = 0;                //将最后的结果定义为long类型,这样可以和整型的最大最小数比较大小
	        int len = str.length();
	        if (len < 1)
	            return 0;
	        int start = 0;
	        boolean temp = false;
	        if (str.charAt(start) == '-' || str.charAt(start) == '+') {     //判断正负号问题
	            if (str.charAt(start) == '-')                             
	                temp = true;
	            start++;
	        }

	        for (int i = start; i < len; i++) {
	            char ch = str.charAt(i);
	 
	            if (ch < '0' || ch > '9')                        //判断是否包含特殊字符
	                break;
	            result = 10 * result + (ch-'0');                //将读出的整型数字放到最前面
	            if (!temp && result > max)
	                return max;
	            if (temp && -result < min)                      //判断是否越界
	                return min;
	 
	        }
	        if (temp)
	            result = -result;
		 return (int)result;
	    }

}

       语句的具体功能写在注释中了。需要注意的点真的是非常多。    

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值