首页IT科技把字符串转换为整数(每日算法之把字符串转换成整数(atoi))

把字符串转换为整数(每日算法之把字符串转换成整数(atoi))

时间2025-06-20 12:45:30分类IT科技浏览3998
导读:JZ67 把字符串转换成整数(atoi 题目 写一个函数 StrToInt,实现把字符串转换成整数这个功能。不能使用 atoi 或者其他类似的库函数。传入的字符串可能有以下部分组成: 1.若干空格 2.(可选)一个符号字符(...

JZ67 把字符串转换成整数(atoi)

题目

写一个函数 StrToInt            ,实现把字符串转换成整数这个功能            。不能使用 atoi 或者其他类似的库函数                  。传入的字符串可能有以下部分组成: 1.若干空格 2.(可选)一个符号字符(+-) 3. 数字                  ,字母      ,符号      ,空格组成的字符串表达式 4. 若干空格 转换算法如下: 1.去掉无用的前导空格 2.第一个非空字符为+或者-号时                  ,作为该整数的正负号            ,如果没有符号      ,默认为正数 3.判断整数的有效部分: 3.1 确定符号位之后                  ,与之后面尽可能多的连续数字组合起来成为有效整数数字            ,如果没有有效的整数部分,那么直接返回0 3.2 将字符串前面的整数部分取出                  ,后面可能会存在存在多余的字符(字母                  ,符号,空格等)            ,这些字符可以被忽略                  ,它们对于函数不应该造成影响 3.3 整数超过 32 位有符号整数范围 [−231, 231 − 1]       ,需要截断这个整数            ,使其保持在这个范围内      。具体来说                  ,小于 −231的整数应该被调整为 −231       ,大于 231 − 1 的整数应该被调整为 231 − 1 4.去掉无用的后导空格

方法 位运算

思路

算法实现

既然是将字符串转化为数字      ,那我们可以遍历字符串                  ,一个字符串            ,一个字符地检查      ,然后取出掉无用的                  ,取出数字            ,利用如下代码,一个数字一个数字地转换                  ,前面的扩大十倍加上后面一位      。 res = res * 10 + sign * (c - 0); 具体做法: step 1:遍历字符串                  ,用index记录全程的下标                  。 step 2:首先要排除空串,然后越过前导空格            ,以及前导空格后什么都没有就返回0. step 3:然后检查符号                  ,没有符号默认为正数            。 step 4:再在后续遍历的时候      ,将数字字符转换成字符            ,遇到非数字则结束转换      。 step 5:与Int型最大最小值比较                  ,检查越界情况                  。

代码

package mid.JZ67把字符串转换成整数; import java.util.*; public class Solution { /** * 代码中的类名            、方法名                  、参数名已经指定      ,请勿修改      ,直接返回方法规定的值即可 * * * @param s string字符串 * @return int整型 */ public int StrToInt (String s) { // write code here if (s.isEmpty()) return 0; int res = 0; int index = 0; while(index < s.length()) { if (s.charAt(index) == ) index++; else break;; } //去掉空格就没了 if (index == s.length()) return 0; int sign = 1; //处理第一个符号是正负号的情况 if (s.charAt(index) == +) index++; else if (s.charAt(index) == -){ sign = -1; index++; } //去掉符号就什么都没有了 if(index == s.length()) return 0; while(index < s.length()) { char c = s.charAt(index); if (c < 0 || c > 9) { break; } //处理越界 if(res > Integer.MAX_VALUE / 10 || (res == Integer.MAX_VALUE / 10 && (c - 0) > Integer.MAX_VALUE % 10)) return Integer.MAX_VALUE; if(res < Integer.MIN_VALUE / 10 || (res == Integer.MIN_VALUE / 10 && (c - 0) > -(Integer.MIN_VALUE % 10))) return Integer.MIN_VALUE; res = res * 10 + sign * (c - 0); index++; } return res; } }

创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!

展开全文READ MORE
微软kb5003254(微软发布KB5004760补丁(附下载) 完美解决Win10加载PDF文档异常问题)