本文参考自《剑指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. Linux下解压缩

    1)对于.tar结尾的文件 tar -xf all.tar 2)对于.gz结尾的文件 gzip -d all.gz gunzip all.gz 3)对于.tgz或.tar.gz结尾的文件 tar -x ...

  2. Seafile 网络磁盘

    Seafile 个人 网盘 1.安装 Seafile 1.安装依赖环境 使用 yum 安装 Python 及 MySQL: yum install python python-setuptools p ...

  3. 液晶数字显示屏QLCDNumbe

    import sys from PyQt5.QtWidgets import QApplication, QWidget, QLCDNumber, QVBoxLayout class Demo(QWi ...

  4. quartz开源插件(定时心跳后台执行)

    定时心跳,一般应用场景都是服务或者exe控制台程序来搜集数据推送等,供其他页面来调用或者向服务推送等,但又不限于此. 1.先来介绍下quartz吧. 2.quartz用法: 3.我写个小例子来巩固下q ...

  5. 3D点云数据分析:pointNet++论文分析及阅读笔记

    PointNet的缺点: PointNet不捕获由度量空间点引起的局部结构,限制了它识别细粒度图案和泛化到复杂场景的能力. 利用度量空间距离,我们的网络能够通过增加上下文尺度来学习局部特征. 点集通常 ...

  6. 【学习博客】Python学习初体验

    本周是正式开始学习Python的第一周.很久不写代码了,毕业第5年了,期间几乎没怎么动过手.这段时间比较规律.密集的学习又让我找回了当时的感觉,还不算陌生,我挺喜欢的这种能实实在在看到自己知识增长的状 ...

  7. 【ANT】ant使用

    官网:https://ant.apache.org/,task介绍:https://ant.apache.org/manual/index.html 0.介绍: Ant的构建文件当开始一个新的项目时, ...

  8. dbms_metadata.get_ddl的用法(DDL)

    dbms_metadata包中的get_ddl函数 --GET_DDL: Return the metadata for a single object as DDL. -- This interfa ...

  9. 关于C++中的指针、数组

    C++中指针和数组基本等价的原因在于指针算术和C++内部处理数组的方式:将整数变量加一后,其值将增加1:将指针变量加一后,增加的量等于其指向的数据类型的字节数: 指针中存储的是地址,地址在形式上和整数 ...

  10. STOMP Over WebSocket

    Show Table of Contents What is STOMP? STOMP is a simple text-orientated messaging protocol. It defin ...