JZ67 把字符串转换成整数
Posted 张同学吧
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JZ67 把字符串转换成整数相关的知识,希望对你有一定的参考价值。
题目
描述
将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0
输入描述:
输入一个字符串,包括数字字母符号,可以为空
返回值描述:
如果是合法的数值表达则返回该数字,否则返回0
示例1 输入:"+2147483647"
返回值:2147483647
示例2 输入:“1a33”
返回值:0
解题思路
看到这道题首先我们应该想到要判断边界问题,也就是你的下标不可以超出str.length();其次:
第一、如果是一个空字符或者字符串长度为零,返回0。
第二、如果输出的整形越过了Int的边界,那么返回Int的边界值。
第三、如果是一个无效的字符串,比如数字中夹杂着字母,返回0
第四、如果字符串符号为空,默认为正数。
所以第一步检测空字符,很简单,
if(str == null || str.length()==0)return 0;
第二步,检查正负号,字符串第一位如果为‘+’,那么标识符设为1,如果字符串第一位为‘-’,标识符设置成‘-1’.同时i置到下一位。
int flag = 0;
if (str.charAt(i) == '+')
i++;
else if (str.charAt(i) == '-')
flag = -1;
i++;
else
flag = 1;
i++;
第三步,对剩余的字符串转化成整数,并且比较结果与Int类型的边界值
运行代码
public class Solution
public int StrToInt(String str)
int i = 0;
int length = str.length();
if (length == 0) return 0;
int flag = 0;
if (str.charAt(i) == '+')
i++;
else if (str.charAt(i) == '-')
flag = -1;
i++;
else
flag = 1;
i++;
int num = 0;
while (i < str.length() && str.charAt(i) >= '0' && str.charAt(i) <= '9')
int index = str.charAt(i);
if (num > Integer.MAX_VALUE)
return Integer.MAX_VALUE;
else if (num < Integer.MIN_VALUE)
return Integer.MIN_VALUE;
if (index >= '0' && index <= '9')
num = num * 10 + str.charAt(i) - '0';
else
return 0;
i++;
return (flag * num);
有可以改进的地方欢迎各位大佬指点
以上是关于JZ67 把字符串转换成整数的主要内容,如果未能解决你的问题,请参考以下文章