【Java】 剑指offer(67) 把字符串转换成整数

 

本文参考自《剑指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=‘+’的情况被判断为trueif((!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); //0x7FFFFFFFSystem.out.println(isValid==true);System.out.println(strToInt("2147483648")==0);System.out.println(isValid==false);System.out.println(strToInt("-2147483648")==-2147483648); //0x80000000System.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实现合集  

 

转载于:https://www.cnblogs.com/yongh/p/9973036.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/426419.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java学习(89):Charactor包装类统计

//Character方法数量统计 public class test24 {public static void main(String[] args) {char ch A;//使用构造方法Character obj1 new Character(中);//使用静态方法Character obj2 Character.valueOf(ch);char[] arr {5, A, a, C, D, U, 5, 9, ,J,9};countChar(arr);}p…

南师大632c语言程序设计,单片机c语言学习心得632.docx

可编辑文档PAGE 页码页码/NUMPAGES 总页数总页数单片机c语言学习心得(一)相信很多爱好电子的朋友,对单片机这个词应该都不会陌生了吧。.不过有些朋友可能只听说他叫单片机&#xff0c;他的全称是什么也许并不太清楚&#xff0c;更不用说他的英文全称和简称了。单片机是一块在集…

java学习(90):Character方法大小写转换

//Character方法大小写转换 public class test25 {public static void main(String[] args) {char ch A;//使用构造方法Character obj1 new Character(中);//使用静态方法Character obj2 Character.valueOf(ch);char[] arr {5, A, a, C, D, U, 5, 9, ,J,9};//countChar(arr…

c语言实现socket转json,C++解析JSON进行网络传输--一个通过JSON方式的socket传输

1、客户端&#xff1a;#include "json//json.h"#include #pragma comment(lib, "WS2_32.lib")#pragma comment(lib, "json_vc71_libmtd.lib")int main(){Json::Value val;Json::StyledWriter style_write;val["name"] "xiaoli&q…

《linux就该这么学》第六节,计划任务和用户身份管理!

课本笔记&#xff1a; case条件测试语句 4.4&#xff1a;计划任务服务 at 设置一次性计划任务 at 时间 //设置执行的任务 at -l或atq // 查看设置好但未执行的任务 ctrld 保存at计划任务 ctrlc取消at计划任务 atrm 任务序号…

java学习(91):System类

//System类 import java.util.Date; import java.util.Properties; public class test26 {public static void main(String[] args){testOut(-1);//获取系统时间long sysTimeSystem.currentTimeMillis();System.out.println(sysTime);Date datenew Date();System.out.println(d…

c语言 用一维数组存储二叉树,用一维数组存储二叉树时,总是以前序遍历顺序存储结点。( ? )...

用前模式包括献不治疗的积人本哪项以下极贡。维数包括学校工作的过程和方面以下技术几个社区。组存总题大括&#xff1a;致包青少区问年社。可能在含工气体含有有或井施&#xff0c;备合格的个人和相防护应配用具应(。部件理液更换切断或修液压压钳应先。特殊须提劳动理情况前解…

Servlet 文件上传

Servlet 可以与 HTML form 标签一起使用&#xff0c;来允许用户上传文件到服务器。上传的文件可以是文本文件或图像文件或任何文档。 本文使用到的文件有&#xff1a; 创建一个文件上传表单 下面的 HTML 代码创建了一个文件上传表单。以下几点需要注意&#xff1a; 表单 method…

java学习(92):线程的创建方法一

//线程的创建方法1class Xc extends Thread {public void run(){for (int i0;i<20;i){System.out.println("我是歌谣");}} } public class test27{public static void main(String[] args){Xc xcnew Xc();xc.start();//程序会自动调用run方法for (int i0;i<20;…

C语言单链表实现FCFS算法,数据结构与算法复习题(含答案).doc

《数据结构与算法》2015-2016学年第1学期考试复习题选择题(下面各小题有一个正确答案&#xff0c;请将正确答案的编号填写在各小题的括号内)。1、在一棵具有5层的满二叉树中结点总数为( A )。A) 31 B)32C)33 D)162、串的逻辑结构与( D )的逻辑结构不相同。A)线性表 B)栈C)队列 …

java学习(93):线程的创建方法二

//创建线程的第二种方法class Xc2 implements Runnable {public void run(){for (int i0;i<20;i){System.out.println("我是歌谣");}} } public class test28{public static void main(String[] args){Xc2 xc2new Xc2();Thread anew Thread(xc2);a.start();//xc.s…

Pycharm使用之设置代码字体大小和颜色主题

1. File->Setting 打开如下所示的对话框&#xff0c;可以在Editor->General->Font下设置字体大小&#xff08;Size&#xff09;、行距&#xff08;Line spacing&#xff09; 2. Editor->Color Scheme 展开如下所示内容&#xff0c;可以选择自己喜欢的主题样式&am…

c语言分量的运算符,C语言基础(04-运算符和表达式)

运算符(也叫操作符)&#xff0d;&#xff0d;运算符是一个表示特定的数学或逻辑操作的符号。如号&#xff0c;表示了一个相加运算&#xff1b;&&号表示了一个逻辑‘与’的运算。由运算符把需要进行运算的各个量(常量或变量)连接起来组成一个表达式。下面要讲的是标准的…

java学习(94):cpu随机调用线程测试

//创建线程 class Xc3 extends Thread {public void run(){System.out.println("当前线程的名称为"Thread.currentThread().getName());} } public class test29{public static void main(String[] args){Xc3 xc3new Xc3();xc3.setName("线程1");//程序会自…

Linux学习——echo和read命令用法

转载自http://www.runoob.com/linux/linux-comm-read.html http://www.178linux.com/76331 echo命令 本文列举了echo命令的几个常用用法并加以实例说明&#xff0c;以作回顾、参考。 echo命令常用作打印输出字符串&#xff0c;根据echo帮助文件可以获得以下信息&#xff1a; 语…

w ndows 高级索引,软媒原创:为Windows7建立索引,搜索文件更给力

Win7之家(www.win7china.com)&#xff1a;软媒原创&#xff1a;为Windows7建立索引&#xff0c;搜索文件更给力也许你还记得XP时代搜索文件时出现的那只黄色的小狗狗&#xff0c;在Windows7时代&#xff0c;搜索变得更加快捷顺手&#xff0c;搜索栏就在那里&#xff0c;不点不搜…

java学习(95):线程的优先级

public class test30 {public static void main(String[] args){Thread xc11new Thread(new Xc41());Thread xc12new Thread(new Xc42());xc11.setPriority(Thread.NORM_PRIORITY3);//数字越大&#xff0c;优先级越高&#xff0c;默认为5xc11.start();xc12.start();} } class X…

51单片机学习笔记之定时器程序设计

一、定时器/计数器概述 1.相关寄存器 &#xff08;1&#xff09;TMOD——方式控制寄存器 GATE C/T M1 M0&#xff08;T1 T0&#xff09; GATE0&#xff0c;定时器/计数器的运行由内部TR0/TR1置1选通&#xff1b; GATE1&#xff0c;定时器/计数器的运行由外部中断&#xff08;I引…

c语言三阶素数魔方阵,用C语言构造3*3素数魔方阵,即找出9个不大于500的素数并排成魔方阵。...

匿名用户1级2014-05-10 回答#include<stdio.h>int sushu(int n){int i;if(n1) return 1;for(i2; i<n; i)if(n%i0) break;if(ni) return 1;else return 0;}int wunai(int t, int b, int c, int d, int e, int f, int g, int h, int p){int a[9];int i, j;a[0]t; a[1]b;…

java学习(96):线程的睡眠

//线程的睡眠 public class test31 {public static void main(String[] args){Xc43 xc43new Xc43();Thread cccnew Thread(xc43);ccc.start();} } class Xc43 implements Runnable {public void run(){for (int i0;i<10;i){System.out.println(Thread.currentThread().getNa…