某网站的编程挑战题目 Java版本的 strToInt

本文提供了一个详细的步骤指南,用于将表示整数的字符串转换成整数,包括过滤非法字符、检查边界值以及实现自定义转换函数。通过实例演示确保代码在各种情况下的正确性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目详情

输入一个表示整数的字符串,把该字符串转换成整数并输出,例如输入字符串"345",则输出整数345。

请完成函数StrToInt,实现字符串转换成整数的功能。



友情提醒

提交代码之前,请复查下你的程序,比如当给的字符串是如左边图片所示的时候,有考虑到么?

当然,它们各自对应的正确输出如右边图片所示(假定你是在32位系统下,编译环境是VS2008以上)

input:                                          output:

                            


注:以上只是部分测试数据,不代表上述数据通过了,即挑战成功。

答题说明


  1. 完成功能函数StrToInt即可,但不要去改动函数名,参数,至于main函数是为方便你在提交代码之前进行在线编译测试;
  2. 不得用库函数atoi。


我提交的代码:

public static int StrToInt(String str)
{
    int d = 0;
 
    // filter 1: "" " " "++" "--" "+ " "- "
    if (str == null || "".equals(str.trim()) || str.indexOf("++")>=0
        		|| str.indexOf("--")>=0 || str.indexOf("+ ")>=0 || str.indexOf("- ")>=0)    {
        return d;
    }
        
        str = str.trim();
        
        // filter 2: only number 
        Character cur = null;
        StringBuffer sb = new StringBuffer();
        for(int i=str.length()-1;i>0;i--){
        	cur = str.charAt(i);
        	if ( cur < '0' || cur > '9' ){
        		sb = new StringBuffer();
        		continue;
        	}
        	sb.insert(0,cur);
        }
        
        // the first char: + or - or number or other
        int flag = 1;
        if (str.charAt(0)=='-'){
    		flag = -1;
    	}else if(str.charAt(0)=='+'){
    		// nothing
    	}else if( str.charAt(0)>='0' && str.charAt(0)<='9'){
    		sb.insert(0, str.charAt(0));
    	}else{
    		sb = new StringBuffer();
    	}
        
        if (sb.length()<1){
        	return d;
        }
        
        // border value
        try{
        	long dd = Long.parseLong(sb.toString()) * flag;
        	if (dd>Integer.MAX_VALUE){
        		return Integer.MAX_VALUE;
        	}
        	if(dd<Integer.MIN_VALUE){
        		return Integer.MIN_VALUE;
        	}
        }catch(Exception e){
        	e.printStackTrace();
        }
        
        // str to int 
        int f = 10;
        int i=sb.length()-1;
        d = sb.charAt(i)-'0';
        while(--i>=0){
        	d += (sb.charAt(i)-'0') * f;
        	f = f * 10;
        }
 
        return d * flag;
    }  

转载于:https://my.oschina.net/main/blog/140337

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值