【Java】 剑指offer(67) 把字符串转换成整数
本文参考自《剑指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.注意到了负号,也要注意到正号。
【Java】 剑指offer(67) 把字符串转换成整数的更多相关文章
- 剑指 Offer 67. 把字符串转换成整数 + 字符串
剑指 Offer 67. 把字符串转换成整数 Offer_67 题目描述 题解分析 java代码 package com.walegarrett.offer; /** * @Author WaleGa ...
- 力扣 - 剑指 Offer 67. 把字符串转换成整数
题目 剑指 Offer 67. 把字符串转换成整数 思路1 根据题意,要解决这题,首先要判断的条件有: 不包括首位空格 第一位必须为:+.-.数字三者其一,否则不合法 数字必须连续的,如果遇到非数字, ...
- Go语言实现:【剑指offer】把字符串转换成整数
该题目来源于牛客网<剑指offer>专题. 将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数. 输入描述: 输入一个字符串,包括数字字母符号,可以为空. 输出描述: 如果是合 ...
- 剑指Offer 49. 把字符串转换成整数 (字符串)
题目描述 将一个字符串转换成一个整数(实现Integer.valueOf(string)的功能,但是string不符合数字要求时返回0),要求不能使用字符串转换整数的库函数. 数值为0或者字符串不是一 ...
- [剑指Offer] 49.把字符串转换成整数
题目描述 将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数. 数值为0或者字符串不是一个合法的数值则返回0 [思路]考虑所有特殊情况 1.数字前面有空格,如s=" 12 ...
- 剑指offer49:把字符串转换成整数
1 题目描述 将一个字符串转换成一个整数(实现Integer.valueOf(string)的功能,但是string不符合数字要求时返回0),要求不能使用字符串转换整数的库函数. 数值为0或者字符串不 ...
- 《剑指offer》面试题67. 把字符串转换成整数
问题描述 写一个函数 StrToInt,实现把字符串转换成整数这个功能.不能使用 atoi 或者其他类似的库函数. 首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止. ...
- [LeetCode]面试题67. 把字符串转换成整数
题目 写一个函数 StrToInt,实现把字符串转换成整数这个功能.不能使用 atoi 或者其他类似的库函数. 首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止. 当我们 ...
- 剑指Offer - 九度1508 - 把字符串转换成整数
剑指Offer - 九度1508 - 把字符串转换成整数2014-02-06 23:46 题目描述: 将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数. 输入: 输入可能包含多个测试样例 ...
随机推荐
- day3 进入指定目录:cd
想进入指定目录使用cd cd 目录名 进入指定目录 进入系统根目录:cd / 回退命令:cd .. 或者 cd ../ 或者 cd ..// 进入当前用户的主目录:cd 或者 cd ~ 跳转指定目录: ...
- PHP 获取给定时间的周日时间或月末时间或每天
//获取给定时间的周日时间或月末时间或每天 private function endDate ($time, $type = 1, $openTime = '20:00:00') { if ($typ ...
- adb环境变量配置
针对win10系统: 搜索“高级系统设置”,点击“环境变量”按钮: 找到“path”双击: 双击“path”,在弹出的环境变量列表中新建,填入adb的文件路径 检查配置是否成功,运行命令adb,出现如 ...
- org.springframework.beans.BeanUtils与org.apache.commons.beanutils.BeanUtils的copyProperties用法区别
知识点 org.springframework.beans.BeanUtils与org.apache.commons.beanutils.BeanUtils都提供了copyProperties方法,作 ...
- Shiro简介及入门(四)
1.1 什么是shiro shiro是apache的一个开源框架,是一个权限管理的框架,实现 用户认证.用户授权. spring中有spring security (原名Acegi),是一个权 ...
- 北洋UAM-05LX(网口系列适用)ROS节点
参考创客智造ROS与激光雷达入门教程 说明: 介绍ROS如何接入Hokuyo网口的雷达及基本使用 测试雷达:UAM-05LX采用太网接口,如果型号是USB口的参考教程 ros wiki: http:/ ...
- D3开发中的资料整理
D3开发台阶比较高,需要对html,css,js非常熟练,还要对SVG非常熟悉,SVG不会就不要开发D3了,下面给大家推荐一本资料,为大家未来的开发提供便利. 这个框架产品不支持ie8,是这个产品的特 ...
- python3数据结构与算法
python内置的数据结构包括:列表(list).集合(set).字典(dictionary),一般情况下我们可以直接使用这些数据结构,但通常我们还需要考虑比如搜索.排序.排列以及赛选等一些常见的问题 ...
- Qt Excel
在pro文件添加 QT +=axcontainer 头文件 #include <QAxObject> void MainWindow::on_btnSelectFileDialog_cli ...
- 初识神经网络NeuralNetworks
1.神经网络的起源 在传统的编程方法中,我们通常会告诉计算机该做什么,并且将一个大问题分解为许多小的.精确的.计算机可以轻松执行的任务.相反,在神经网络中,我们不告诉计算机如何解决问题,而是让计算机从 ...