本文参考自《剑指offer》一书,代码采用Java语言。

更多:《剑指Offer》Java实现合集  

题目

  请你写一个函数StrToInt,实现把字符串转换成整数这个功能。当然,不能使用atoi或者其他类似的库函数。

思路

  题目很简单,主要就是实现对每个字符转化为数字,并进行累加即可。但是有很多特殊情况都需要考虑进去,例如null、空字符串、带有正负号、字符不是数字、溢出等等。

  对于非法的特殊输入,返回值为0,还要用一个全局变量进行标记。

  写代码时一定要考虑清楚各种测试用例。

 测试用例

  1.功能测试(正、负、零、带有正负号的数字)

  2.边界值测试(最大正整数,最小负整数)

  3.特殊测试(null,数空字符串,仅有正负号,非法字符)

Java代码

  今天脑子有点乱,代码总感觉不是很简洁,有点繁琐,但功能是完善的。

  附注:字符串如果仅有正负号这里认定为非法输入

//题目:请你写一个函数StrToInt,实现把字符串转换成整数这个功能。当然,不
//能使用atoi或者其他类似的库函数。 public class StringToInt {
static boolean isValid = false;
public static int strToInt(String str) {
if(str == null || str.length()<=0)
return 0;
char[] chars = str.toCharArray();
long num=0; //先用long来存储,以防止越界
boolean minus=false;
for(int i=0; i<chars.length; i++){
if(i==0 && chars[i]=='-'){
minus=true;
}else if(i==0 && chars[i]=='+'){
minus=false;
}else{
int a=(int) (chars[i]-'0');
if(a<0 || a>9){
isValid=false;
return 0;
}
num= (minus==false) ? num*10+a : num*10-a;
isValid=true; //不放在最后面是为了防止str=‘+’的情况被判断为true
if((!minus && num>0x7FFFFFFF)
||(minus && num<0x80000000)){
isValid=false;
return 0;
}
}
}
return (int)num;
} //简单测试下
public static void main(String[] args) {
System.out.println(strToInt("1948243")==1948243);
System.out.println(isValid==true);
System.out.println(strToInt("+1948243")==1948243);
System.out.println(isValid==true);
System.out.println(strToInt("-1948243")==-1948243);
System.out.println(isValid==true);
System.out.println(strToInt("-0")==0);
System.out.println(isValid==true);
System.out.println(strToInt("-194+8243")==0);
System.out.println(isValid==false);
System.out.println(strToInt("")==0);
System.out.println(isValid==false);
System.out.println(strToInt(null)==0);
System.out.println(isValid==false);
System.out.println(strToInt("999999999999999")==0);
System.out.println(isValid==false);
System.out.println(strToInt("+")==0);
System.out.println(isValid==false); System.out.println(strToInt("2147483647")==2147483647); //0x7FFFFFFF
System.out.println(isValid==true);
System.out.println(strToInt("2147483648")==0);
System.out.println(isValid==false); System.out.println(strToInt("-2147483648")==-2147483648); //0x80000000
System.out.println(isValid==true);
System.out.println(strToInt("-2147483649")==0);
System.out.println(isValid==false);
}
}

  

true
true
true
true
true
true
true
true
true
true
true
true
true
true
true
true
true
true
true
true
true
true
true
true
true
true

StringToInt

收获

  1.熟练掌握char类型转化为int类型操作

  2.边界值测试,记住int类型最大正整数为0x7FFFFFFF,最小负整数为0x80000000

  3.注意到了负号,也要注意到正号。

 

更多:《剑指Offer》Java实现合集  

【Java】 剑指offer(67) 把字符串转换成整数的更多相关文章

  1. 剑指 Offer 67. 把字符串转换成整数 + 字符串

    剑指 Offer 67. 把字符串转换成整数 Offer_67 题目描述 题解分析 java代码 package com.walegarrett.offer; /** * @Author WaleGa ...

  2. 力扣 - 剑指 Offer 67. 把字符串转换成整数

    题目 剑指 Offer 67. 把字符串转换成整数 思路1 根据题意,要解决这题,首先要判断的条件有: 不包括首位空格 第一位必须为:+.-.数字三者其一,否则不合法 数字必须连续的,如果遇到非数字, ...

  3. Go语言实现:【剑指offer】把字符串转换成整数

    该题目来源于牛客网<剑指offer>专题. 将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数. 输入描述: 输入一个字符串,包括数字字母符号,可以为空. 输出描述: 如果是合 ...

  4. 剑指Offer 49. 把字符串转换成整数 (字符串)

    题目描述 将一个字符串转换成一个整数(实现Integer.valueOf(string)的功能,但是string不符合数字要求时返回0),要求不能使用字符串转换整数的库函数. 数值为0或者字符串不是一 ...

  5. [剑指Offer] 49.把字符串转换成整数

    题目描述 将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数. 数值为0或者字符串不是一个合法的数值则返回0  [思路]考虑所有特殊情况 1.数字前面有空格,如s="    12 ...

  6. 剑指offer49:把字符串转换成整数

    1 题目描述 将一个字符串转换成一个整数(实现Integer.valueOf(string)的功能,但是string不符合数字要求时返回0),要求不能使用字符串转换整数的库函数. 数值为0或者字符串不 ...

  7. 《剑指offer》面试题67. 把字符串转换成整数

    问题描述 写一个函数 StrToInt,实现把字符串转换成整数这个功能.不能使用 atoi 或者其他类似的库函数.   首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止. ...

  8. [LeetCode]面试题67. 把字符串转换成整数

    题目 写一个函数 StrToInt,实现把字符串转换成整数这个功能.不能使用 atoi 或者其他类似的库函数. 首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止. 当我们 ...

  9. 剑指Offer - 九度1508 - 把字符串转换成整数

    剑指Offer - 九度1508 - 把字符串转换成整数2014-02-06 23:46 题目描述: 将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数. 输入: 输入可能包含多个测试样例 ...

随机推荐

  1. bzoj1477: 青蛙的约会(exgcd)

    昨天打code+的时候发现自己已经不大会exgcd了..赶紧复习一下QAQ 求$ax+by=gcd(a,b)$的解 初始条件 $gcd(a, 0)=a$ $x=1,y=0$ 推导过程 $gcd(a,b ...

  2. C# 使用ffmpeg视频截图

    <appSettings> <add key="ffmpeg" value="E:\ffmpeg\ffmpeg-20141012-git-20df026 ...

  3. HDU小小练

    hdu1253胜利大逃亡(bfs) 题意:就是城堡问题,找出可通行路径即可 思路:三维BFS,设定前后上下左右6个方向搜索,注意开始的时候人站的位置可以是墙. hdu1495非常可乐(bfs) 题意: ...

  4. 第14月第23天 uitextfield文字下移

    1. http://www.jianshu.com/p/641a0cbcabb0

  5. JavaScript学习 - 基础(二) - 基础类型/类型转换

    基础类型 - 数字类型(Number) 1.最基本的数据类型 2.不区分整型数值和浮点型数值 3.所有数字采用64位浮点格式存储,相当于Java和C语言中double格式 4.能表示的最大值 +- 1 ...

  6. Hadoop的RPC机制及简单实现

    1.RPC简介 Remote Procedure Call 远程过程调用协议 RPC——远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议.RPC协议假定某些 ...

  7. POI导出带格式的Excel模板——(六)

    Jar包

  8. MAC上mongodb连接不上

    1.在Mac客户端里输入 mongo,发现mongo连接不上了,原因是mongo的服务没有开启. 2.在命令行了输入 mongod,开启服务的命令 3.启动起来以后,用mongo连接服务器.

  9. 如何交叉编译 linux kernel 内核

    Compilation We first need to move the config file by running cp arch/arm/configs/bcmrpi_cutdown_defc ...

  10. 用nodejs搭建BS环境

    var http = require('http'); http.createServer(function (req, res) {res.writeHead(200, {'Content-Type ...