本文主要是介绍47 实现一个函数stringToInt,实现把字符串转换成整数这个功能,不能使用atoi或者其他类似的库函数。,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
一、题目
实现一个函数stringToInt,实现把字符串转换成整数这个功能,不能使用atoi或者其他类似的库函数。
二、解题代码
这看起来是很简单的题目,实现基本功能 ,大部分人都能用10行之内的代码解决。可是,当我们要把很多特殊情况即测试用例都考虑进去,却不是件容易的事。解决数值转换问题本身并不难,但我希望在写转换数值的代码之前,应聘者至少能把空指针,空字符串”“,正负号,溢出等方方面面的测试用例都考虑到,并且在写代码的时候对这些特殊的输入都定义好合理的输出。当然,这些输出并不一定要和atoi完全保持一致,但必须要有显式的说明,和面试官沟通好。
这个应聘者最大的问题就是还没有养成在写代码之前考虑所有可能的测试用例的习惯,逻辑不够严谨,因此一开始的代码只处理了最基本的数值转换。后来我每次提醒他一处特殊的测试用例之后,他改一处代码。尽管他已经做了两次修改,但仍然有不少很明显的漏洞,特殊输入空字符串”“,边界条件比如最大的正整数与最小的负整数等。由于这道题思路本身不难,因此我希望他把问题考虑得极可能周到,代码尽量写完整
int 范围-2147483648 到 2147483647 public class Test {/*** 题目:实现一个函数stringToInt,实现把字符串转换成整数这个功能,* 不能使用atoi或者其他类似的库函数。** @param num* @return*/public class Solution {public boolean flag;public int StrToInt(String str) {flag = false;//判断输入是否合法if (str == null || str.trim().equals("")) {flag = true;return 0;}// symbol=0,说明该数为正数;symbol=1,该数为负数;start用来区分第一位是否为符号位int symbol = 0;int start = 0;char[] chars = str.trim().toCharArray();if (chars[0] == '+') {start = 1;} else if (chars[0] == '-') {start = 1;symbol = 1;}int result = 0;for (int i = start; i < chars.length; i++) {if (chars[i] > '9' || chars[i] < '0') {flag = true;return 0;}result=result * 10 + (int) (chars[i] - '0');/** 本人认为java热门第一判断是否溢出是错误的,举个反例* 当输入为value=2147483648时,在计算机内部的表示应该是-2147483648* 显然value>Integer.MAX_VALUE是不成立的*/}// 注意:java中-1的n次方不能用:(-1)^n .'^'异或运算// 注意,当value=-2147483648时,value=-valueresult = (int) Math.pow(-1, symbol) * result;return result;}
}
这篇关于47 实现一个函数stringToInt,实现把字符串转换成整数这个功能,不能使用atoi或者其他类似的库函数。的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!