文档章节

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

杨子江
 杨子江
发布于 2013/06/25 13:34
字数 401
阅读 217
收藏 0

「深度学习福利」大神带你进阶工程师,立即查看>>>

题目详情

输入一个表示整数的字符串,把该字符串转换成整数并输出,例如输入字符串"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;
    }  
杨子江

杨子江

粉丝 62
博文 3
码字总数 1646
作品 0
深圳
架构师
私信 提问
加载中
此博客有 2 条评论,请先登录后再查看。
Netty那点事(三)Channel与Pipeline

Channel是理解和使用Netty的核心。Channel的涉及内容较多,这里我使用由浅入深的介绍方法。在这篇文章中,我们主要介绍Channel部分中Pipeline实现机制。为了避免枯燥,借用一下《盗梦空间》的...

黄亿华
2013/11/24
2W
22
Flappy Bird(安卓版)逆向分析(一)

更改每过一关的增长分数 反编译的步骤就不介绍了,我们直接来看反编译得到的文件夹 方法1:在smali目录下,我们看到org/andengine/,可以知晓游戏是由andengine引擎开发的。打开/res/raw/at...

enimey
2014/03/04
6K
18
我的架构演化笔记 功能1: 基本的用户注册

“咚咚”,一阵急促的敲门声, 我从睡梦中惊醒,我靠,这才几点,谁这么早, 开门一看,原来我的小表弟放暑假了,来南京玩,顺便说跟我后面学习一个网站是怎么做出来的。 于是有了下面的一段...

强子哥哥
2014/05/31
976
3
Nutch学习笔记4-Nutch 1.7 的 索引篇 ElasticSearch

上一篇讲解了爬取和分析的流程,很重要的收获就是: 解析过程中,会根据页面的ContentType获得一系列的注册解析器, 依次调用每个解析器,当其中一个解析成功后就返回,否则继续执行下一个解...

强子哥哥
2014/06/26
712
0
5分钟 maven3 快速入门指南

前提条件 你首先需要了解如何在电脑上安装软件。如果你不知道如何做到这一点,请询问你办公室,学校里的人,或花钱找人来解释这个给你。 不建议给Maven的服务邮箱来发邮件寻求支持。 安装Mav...

fanl1982
2014/01/23
1.2W
7

没有更多内容

加载失败,请刷新页面

加载更多

在视图控制器之间传递数据 - Passing Data between View Controllers

问题: I'm new to iOS and Objective-C and the whole MVC paradigm and I'm stuck with the following: 我是iOS和Objective-C以及整个MVC范例的新手,但我坚持以下几点: I have a view th......

fyin1314
10分钟前
6
0
Elasticsearch中mapping值得注意的一些小细节

简介 在Elasticsearch中mapping有很多可以配置的地方,但是使用多了就会发现,一般情况有关mapping最常用、也最实用的就简单的几个需要注意的地方。 下面就简单的介绍一下关于这些mapping中值...

trayvon
13分钟前
0
0
趣味编程-大鱼吃小鱼(5-7岁)

上一节老师教小朋友们编写了摘星星的游戏,今天跟着了老师学一下大鱼吃小鱼这个游戏吧!拿上你们的平板,跟着老师一起来做吧。 防止失联,点个“在看”!多多转发分享是老师录制视频的动力哦...

rainbow0124
今天
1
0
大集合!写作辅助工具

↑公众号关注 “Graph-AI” 专注于 图机器学习 大集合!论文写作辅助工具 这里收集论文写作过程中的辅助工具,比如包括Latex、画图、图表、语法、词语搭配、文献查找\下载\整理、翻译等。 会...

chengsen
08/01
0
0
SSL指纹的自定义功能-VMLogin 中文版防关联指纹浏览器在1.2.6.7 版本更新中加入

VMLogin 中文版指纹浏览器 在本次1.2.6.7 版本更新中加入了SSL指纹的自定义功能。 VMLogin 中文版浏览器:https://www.vmlogin.cc/ 主要可以设置 密码套件 的个数和顺序,这样能可以对抗一些...

VMlogin中文版防关联浏览器
25分钟前
13
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部